sed + 単語が出現しない場合にのみ各文字列の最後の単語を追加します

sed + 単語が出現しない場合にのみ各文字列の最後の単語を追加します

次のファイルがあります:

linuxA.mtt.corp
linux3V
linux4B
linux2A
linux5v.mtt.corp

この単語が含まれていない各文字列に を追加するにはどうすればよいでしょうか.mtt.corp?

答え1

それはとても簡単ですsed:

sed -e '/\.mtt\.corp$/!s/$/.mtt.corp/' <file

これにより、その文字列で終わらない各行のs行末が に置き換えられます。.mtt.corp

答え2

Perl ソリューション:

$ perl -lpe '$_ .= ".mtt.corp" if !/\.mtt\.corp$/' file
linuxA.mtt.corp
linux3V.mtt.corp
linux4B.mtt.corp
linux2A.mtt.corp
linux5v.mtt.corp

は、 によって指定されたスクリプトを適用した後、入力ファイルの各行を印刷し-p、は各入力行から末尾の改行を削除し、各呼び出しに 1 つ追加します。変数は現在の行です。したがって、すでに一致していない場合は、行に 追加されます。perl-e-lprint$_mtt.corp

awk ソリューション:

$ awk '!/\.mtt\.corp$/{$0=$0".mtt.corp"}1;' file
linuxA.mtt.corp
linux3V.mtt.corp
linux4B.mtt.corp
linux2A.mtt.corp
linux5v.mtt.corp

同じ考え方です。 は、それで終わらない.mtt.corp行 ( ) に追加され、各行が印刷されます ( )。$01;

関連情報