web-dev-qa-db-ja.com

ファイル内の特定の文字列の後にテキストを挿入する方法は?

現在、ファイルにテキストを追加するためにecho "Hello World" >> file.txtを使用していますが、特定の文字列の下にテキストを追加する必要もあります。たとえば、「[オプション]」と言いましょう。sedを使用して可能ですか?

例えば:

入力ファイル

Some text
Random
[option]
Some stuff

出力ファイル

Some text
Random
[option]
*inserted text*
Some stuff
78

一致後に行を追加

  • sed '/\[option\]/a Hello World' input

一致する前に行を挿入

  • sed '/\[option\]/i Hello World' input

さらに、sedに-i.bkpオプションを使用して、バックアップを取り、入力ファイルをインプレースで編集できます。

113
Rahul Patil

はい、sedで可能です:

sed '/pattern/a some text here' filename

例:

$ cat test
foo
bar
option
baz
$ sed '/option/a insert text here' test
foo
bar
option
insert text here
baz
$
36
devnull

awkの場合:

awk '1;/PATTERN/{ print "add one line"; print "\\and one more"}' infile

一部の文字は文字どおりに含めることができないため、エスケープシーケンス(バックスラッシュで始まる)を使用する必要があることに注意してください。リテラルのバックスラッシュを出力するには、\\

実際にはsedと同じですが、さらに、テキストに埋め込まれた各改行の前にバックスラッシュを付ける必要があります。

sed '/PATTERN/a\
add one line\
\\and one more' infile

エスケープシーケンスの詳細については、マニュアルを参照してください。

6
don_crissti