今私は使っています。
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
エスケープシーケンスの詳細については、マニュアルを参照してください。
また、いくつかのコメントを解決するために、上記のコマンドはファイルを内部で編集せずに結果を標準出力に出力します。入力ファイルを実際に変更するには、スイッチを使用するか(マニュアルを確認)、サポートしている場合はスイッチを使用するか、一時ファイルにリダイレクトしてから元のファイルを上書きできます-i
。awk
sed
cmd infile > outfile
mv outfile infile
またはed
/を使用して、ex
すべてのプラットフォーム上のファイルを編集します。
ex -s infile <<\IN
/PATTERN/a
add one line
and one more
.
w
q
IN
覚えておいてください:ed
追加と挿入には//を使用し、最後に移動するにはを使用して挿入します。sed
ex
a
i
awk
1
答え4
これはこのユーティリティを使用して達成することもできますed
。を使用する方が簡単ですが、追加のsed
ユーティリティに慣れることをお勧めします。 (私は特別にedを使ってこれを行う方法を見つけるためにこのページにアクセスしました。私はすでにsedでこれを行う方法を知っています。)
サンプルファイルの場合(参照用に印刷された行番号):
1 Some text
2 Random
3 [option]
4 Some stuff
提案された出力を取得するためのコマンドは次のとおりed
です。
4i
*inserted text*
.
w
q
説明する:
- 4行目に移動して挿入モードを開始します。 (i)
- 次へ追加*テキスト挿入*(改行含む)
- 挿入モード終了(.)
- ファイル(w)に書き込んで終了
ed
(q)
1つのコマンドを使用して、これらすべてを1つにまとめることができますここにある文字列:
ed filename.txt <<< '4i
*inserted text*
.
w
q
'