0

次のようなファイルを編集しようとしています。

Separator line of dashes
Letters
Separator line of dashes
aaa
bbb

Separator line of dashes
Numbers
Separator line of dashes
111
222

ダッシュの間のフレーズは、セクションのタイトルであると想定されています。

sed で、「Numbers」セクションに「000」のような文字列を追加したい。出力は次のようになります。

Separator line of dashes
Numbers
Separator line of dashes
000
111
222

私の質問は、「Numbers」というタイトルのセクションの最初の行として「000」を追加したいことをsedにどのように伝えるのですか?

私は次のものを持っています:

sed -i '/Numbers/ a\New ACE goes here' myFile

これで私の行はタイトルのすぐ下に追加されますが、実際には 2 行下に必要です。

今後の参考として、「この行」に一致した後、特定の行番号にこれを追加するようにsedに伝えたい場合はどうなりますか?

4

2 に答える 2

1

使用:

sed '/^Numbers/ { N; N; s/^\(.*\)\(\n\)/\1\2000\n/ }' infile

に一致する行が見つかったらNumbers、次の 2 行を追加し000、最後の改行文字の直後に文字列を追加します。

次の結果が得られます。

Separator line of dashes
Letters
Separator line of dashes
aaa
bbb

Separator line of dashes
Numbers
Separator line of dashes
000
111
222

編集a\コメントで尋ねられたように、置換を行わずに新しい行を追加するために使用します。独自の改行で追加されるためN、一致した後に次の行 ( ) のみを追加するようになりました。Numbersa\

sed '/^Numbers/ { N; a\
000
}' infile

同じ結果が得られます。

于 2013-09-09T21:39:37.653 に答える
0

で行う方が簡単です。最初のフィールドが一致したらNumbers、その行を印刷し、次の行を読み取り ( getline)、それを印刷してから、自分の行を印刷します ( 000)。最後printは、入力ファイルの他のすべての行のデフォルトです。

awk '$1 ~ /Numbers/ { print; getline; print; print "000"; next } { print }' infile

次の結果が得られます。

Separator line of dashes
Letters
Separator line of dashes
aaa
bbb

Separator line of dashes
Numbers
Separator line of dashes
000
111
222
于 2013-09-09T21:33:45.253 に答える