パターンがまだ存在しない場合にのみ、パターンに一致する各行の下に行を追加します。

パターンがまだ存在しない場合にのみ、パターンに一致する各行の下に行を追加します。

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+; printOs 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

おすすめ記事