web-dev-qa-db-ja.com

sedを使用して、パターンの上または下に行を挿入しますか?

一意のパターンのすぐ下または上に1行または複数行を挿入して、多数のファイルを編集する必要があります。シェルでsedawkPerl(またはその他)を使用してその方法をアドバイスしてください。ありがとう!例:

some text
lorem ipsum dolor sit amet
more text

consectetur adipiscing elitの後にlorem ipsum dolor sit ametを挿入したいので、出力ファイルは次のようになります。

some text
lorem ipsum dolor sit amet
consectetur adipiscing elit
more text
71
vehomzzz

パターンの後に追加するには:(-iはインプレース置換の場合)。 line1とline2は、追加(または追加)する行です。

sed -i '/pattern/a \
line1 \
line2' inputfile

出力:

#cat inputfile
 pattern
 line1 line2 

前に行を追加するには:

sed -i '/pattern/i \
line1 \
line2' inputfile

出力:

#cat inputfile
 line1 line2 
 pattern
144
Kamal

以下は、SearchPatternの後に1行追加します。

sed -i '/SearchPattern/aNew Text' SomeFile.txt

SearchPatternを含む各行の下にNew Textを1行挿入します。

2行を追加するには、\を使用し、New Textと入力しながら改行を入力します。

POSIX sedには\a sed関数の後に改行が必要です。 [1]改行なしで追加するテキストの指定はGNU sed拡張機能(sed情報ページに記載されている)であるため、その使用法は移植性が低くなります。

[1] https://unix.stackexchange.com/questions/52131/sed-on-osx-insert-at-a-certain-line/

33
jahroy

スタンザの指定された詩の後に新しい詩を挿入します。

sed -i '/^lorem ipsum dolor sit amet$/ s:$:\nconsectetur adipiscing elit:' FILE
3
alinsoar

Edの使用により移植性があります。一部のシステムはsedで\ nをサポートしていません

printf "/^lorem ipsum dolor sit amet/a\nconsectetur adipiscing elit\n.\nw\nq\n" |\
    /bin/ed $filename
1
Chris Rees