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


69

現在、私はecho "Hello World" >> file.txtファイルにテキストを追加するために使用していますが、特定の文字列の下にテキストを追加する必要があります。「[option]」と言いますsed

例えば:

入力ファイル

Some text
Random
[option]
Some stuff

出力ファイル

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

1
正確なコマンドを使用するには、より具体的であり、人々にサンプルテキストを提供する必要があります。
クレメント14年

Qを編集してinputoutput行と行を表示してください。Qが不明確だからです。することもできますがecho "Hello World [option]" >> file.txt、意味がありません。

私は参考のために多くの情報を提供するために、質問を編集したが、受け入れられた答えは私が達成するために何をしようとした
ハビエル・ビジャヌエバ

構成ファイル編集したいだけならこれが私が見つけた最良の解決策です:unix.stackexchange.com/a/78076/20661
rubo77

回答:


104

試合後に行を追加

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

一致する前に行を挿入

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

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


2
OSXで私が取得sed: 1: "/pattern/a some text here": command a expects \ followed by text
the_prole


Mac OSX \ <<NEWLINE>>a場合、オプションの後に追加する必要がありました
Tom Howard

上記のコードは、一致するすべての行に行を追加/挿入します。最初の一致の場合にのみ行を追加/挿入する場合は0,、コマンドの前に追加できます。sed '0,/\[option\]/a Hello World' inputまたはsed '0,/\[option\]/i Hello World' input
kimbaudi

33

はい、可能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
$

2
@javiervd最初の答えの意味がわかりませんか?あなたが答えた時間までに最初に意味するなら、あなたは間違っています。タイムスタンプを注意深く観察しませんでした!
devnull

最新の文字列が一致した後に追加する方法はありますか?例:foo bar option bar option baz 。だから、パターンはなる foo bar option bar option addedstring baz
アリ

4

awk

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

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

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

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

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


awk行は実際にはテキストを変更せず、出力のみを変更します。
ヨーゼフクリムク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.