sed + 存在しない場合のみ、文字列の前に単語を追加します。

sed + 存在しない場合のみ、文字列の前に単語を追加します。

Linuxのファイルには次の行があります。

discovery.uri=http://master.navada.com:8800

kokobeforeという単語を追加したいmasterので、次のようにします。

sed –i 's/master/kokomaster/' file

これは作る:

discovery.uri=http://kokomaster.navada.com:8800

kokoしかし、私たちが望むのは、koko以前に存在しなかった場合にのみ追加することですmaster

たとえば、次回実行するとき

sed –i 's/master/kokomaster/' file

その行は次のとおりです。

discovery.uri=http://kokokokomaster.navada.com:8800

ベストアンサー1

sed -i '/kokomaster/!s/master/koko&/' file

まず、その行に文字列がkokomasterあるかどうかをテストし、それ以外の場合は置き換えます。これは「しかし、私たちが望むものは、以前に存在しなかった単語kokoだけを追加することです」をほとんど文字通り翻訳したものです。kokomastersed

交換の交換部分は、&パターン部分(たとえば)に一致するテキストで置き換えられますmaster


コメント(後述)を読んだ後、URIパスの途中に表示または表示されなくても、実際にはURIのサーバー名部分のみを変更し、master他の場所では文字列を変更しないより具体的なものを使用できます。kokomaster

sed -i 's,^\(discovery\.uri=http://\)\(master\),\1koko\2,' file

できるだけ正確な合計を一致させたい場合があります。いっぱい予想されるエラーを避けるために置き換える行は次のとおりです。

sed -i 's,^\(discovery\.uri=http://\)\(master\.navada\.com:8800\)$,\1koko\2,' file

構成ファイルがJSONまたはその他のよく知られた形式で作成された場合sed別の言葉、またはjqこの形式のファイルを処理するために特別に作成された他の適切なツールです。

おすすめ記事