sed
特定の内容の下に新しい行を追加し、入力内容がある場合はそれを維持できますか?
ファイルの現在の内容ssss
Hostname example.com
Os version rhel5.6
apache 4.2
Hostname example2.com
Os version rhel5.6
必須ファイルの内容ssss
Hostname example.com
Os version rhel5.6
apache 4.2
Hostname example2.com
Os version rhel5.6
apache 4.2
次のコマンドを使用してコンテンツを追加できます。
sed -i '/Os version rhel5.6/a apache 4.2' ssss
私の質問
ファイルに指定された内容がある場合は、その内容の下に行を追加して維持したいと思います。コンテンツがない場合は追加してください。
ベストアンサー1
このperl
表現は目的を達成することができます。
perl -i -ne 'next if /apache 4.2/;s+Os version rhel5.6+Os version rhel5.6\napache 4.2+; print' ssss
説明する
next if /apache 4.2/
一致する行をスキップしますapache 4.2
。s+Os version rhel5.6+Os version rhel5.6\napache 4.2+; print
Os version rhel5.6
改行に追加されるのと同じ行で行を検索して置き換えますapache 4.2
。
入力ファイルでテスト
$ cat ssss
Hostname example.com
Os version rhel5.6
apache 4.2
Hostname example2.com
Os version rhel5.6
$ perl -ne 'next if /apache 4.2/;s+Os version rhel5.6+Os version rhel5.6\napache 4.2+; print' ssss
Hostname example.com
Os version rhel5.6
apache 4.2
Hostname example2.com
Os version rhel5.6
apache 4.2