2016-12-01 18 views
1

ファイル内の範囲の最後の前に行を追加します。SED:範囲の最後に行を追加します。

sed '/BEGIN/,/END/ /$/i \ SOME TEXT TO ADD' /path/to/foo

  • オリジナルファイル:SED後 random text BEGIN foo bar END random text
  • 期待される動作: random text BEGIN foo bar SOME TEXT TO ADD END random text

これを実現する方法上の任意のアイデア? (GNUのSED)

sed '/BEGIN/,/END/ { 
    /END/ iSOME TEXT TO ADD 
    }' /path/to/foo 
+0

どのバージョンのsedと、どのくらい 'i'コマンドの構文が嫌いですか? – Beta

+0

sed(GNU sed)4.2.2 解決策がある場合は、それを共有してください。 – clvx

答えて

0

なぜあなただ​​けの終了タグを探し、そして前に挿入されません:あなたは、いくつかの行を使用する必要があります。そうしないと

sed '/END/ iSOME TEXT TO ADD' /path/to/foo 

sed '/BEGIN/,/END/!b;/END/iSOME TEXT TO ADD' file 

ないBEGINEND印刷などの間の線がある場合行がENDのテキストを挿入している場合は正常です。

+0

私はそれを使用することはできません。 ENDを使用すると、間違ったENDに一致する可能性があります。私はSTARTがユニークなので、特定の範囲でそれが必要です。 – clvx

1

これはあなたのために働くかもしれない:

+0

それは働いた。ありがとう。 解決策を説明できる場合は、本当にありがとうございます。 – clvx

+0

このコマンドを正しく読んでいますか?「BEGINとENDの間にいる場合、コマンドの最後には分岐しないでください。 – chw21

+0

あなたが好きなら、中括弧で囲まれた範囲のコマンドを囲むことができますが、3行の別々の行を書くことを意味する改行で挿入を終了する必要があります。コマンドを2つのセットに分割するか、/BEGIN /、/ END/{/ END/iSOME TEXT to ADD \ n} 'ファイル' – potong

関連する問題