次のような行がたくさんある大きなbashファイルがあります。
... --env COMP_LABELS="service:service1" ...
service1 は行ごとに異なります。 (時々service:mgmt
またはservice:admin
)。
"
二重引用符()の前に次の文字列を追加するいくつかのコマンド(おそらくsed)を生成しようとしています,branch:$branch
。
したがって、最初の例では次のようになります。
... --env COMP_LABELS="service:service1,branch:$branch" ...
できますか?まず、ありがとうございます!
(似たようなことを試しましたが、sed -i 's/OMP_LABELS=\"service:.*\"/<not sure what to put here since I need to the entire word>/g' filename
どのように達成するのかわかりません)
答え1
"
sedを使用すると、最初の文字の後に文字ではなく一連の文字を簡単に一致させることができます"
。
$ echo '... --env COMP_LABELS="service:service1" ...' |
sed 's/COMP_LABELS="[^"]*/&,branch:$branch/'
... --env COMP_LABELS="service:service1,branch:$branch" ...
これは、/COMP_LABELS="[^"]*/
文字列COMP_LABELS="
の後にゼロ個以上の非"
文字(^
否定演算子)が続くものと一致し、/&,branch:$branch/
LHSで一致したもの(&
逆参照)に置き換えられ、その後に文字列が続きます。,branch:$branch