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

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

今私は使っています。

echo "Hello World" >> file.txt

[option]ファイルにいくつかのテキストを追加することは可能ですが、特定の文字列の下にテキストを追加する必要がありますかsed

たとえば、

入力ファイル

Some text
Random
[option]
Some stuff

結果ファイル

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

答え1

一致後の行の追加

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

一致の前に行を挿入

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

-i.bkpまた、sedオプションを使用して、入力ファイルを内部でバックアップおよび編集することもできます。

答え2

はい、次のものを使用できます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
$

答え3

そしてawk

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

一部の文字は文字通り含めることができないため、以下を使用する必要があります。エスケープシーケンス(バックスラッシュで始まります。)たとえば、リテラルバックスラッシュを印刷するには、を書く必要があります\\

事実上同じsedですが、テキストに含まれるすべての改行の前にはバックスラッシュが必要です。

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

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


また、いくつかのコメントを解決するために、上記のコマンドはファイルを内部で編集せずに結果を標準出力に出力します。入力ファイルを実際に変更するには、スイッチを使用するか(マニュアルを確認)、サポートしている場合はスイッチを使用するか、一時ファイルにリダイレクトしてから元のファイルを上書きできます-iawksed

cmd infile > outfile
mv outfile infile

またはed/を使用して、exすべてのプラットフォーム上のファイルを編集します。

ex -s infile <<\IN
/PATTERN/a
add one line
and one more
.
w
q
IN

覚えておいてください:ed追加と挿入には//を使用し、最後に移動するにはを使用して挿入します。sedexaiawk1

答え4

これはこのユーティリティを使用して達成することもできますed。を使用する方が簡単ですが、追加のsedユーティリティに慣れることをお勧めします。 (私は特別にedを使ってこれを行う方法を見つけるためにこのページにアクセスしました。私はすでにsedでこれを行う方法を知っています。)

サンプルファイルの場合(参照用に印刷された行番号):

 1  Some text
 2  Random
 3  [option]
 4  Some stuff

提案された出力を取得するためのコマンドは次のとおりedです。

4i
*inserted text*
.
w
q

説明する:

  1. 4行目に移動して挿入モードを開始します。 (i)
  2. 次へ追加*テキスト挿入*(改行含む)
  3. 挿入モード終了(.)
  4. ファイル(w)に書き込んで終了ed(q)

1つのコマンドを使用して、これらすべてを1つにまとめることができますここにある文字列:

ed filename.txt <<< '4i
*inserted text*
.
w
q
'

関連情報