2017-10-09 9 views
1

bashでは、新しい行を含むテキストを見つけて置き換えるにはどうすればよいですか?新しい行を含むテキストの検索と置換

私は、指定されたとおりに2行を正確に一致させたいと思います。両方の行が別々の場所に表示されるため、別々に一致させることはできません。&両方の行が連続して表示される場所のみを置き換えます。 sedを使うと、私は個別の行と改行を別々に見つけて置き換えることができましたが、一緒にはできませんでした!場合

、以下の必要に応じて、私は検索と置換したい行です(一度に複数のファイルからは!):一般的に

} elseif ($this->aauth->is_member('Default')) { $form_data['userstat'] = $this->aauth->get_user()->id;

+0

をし、あなたが交換したいですか? –

+0

申し訳ありませんが、実際には重要ですか?キャプチャされたグループを使用して置換する場合は –

+0

、そうです。だから、幸運 –

答えて

1

あなたがnullを使用するsedを伝えsed -zを使用することができます-character行を分割します。あなたはsed -z -e 's/line1\nline2/xxx/g' text利回り

Hello World 
This is a line 
xxx 
Hello World, again 
xxx 
end 

を実行

Hello World 
This is a line 
line1 
line2 
Hello World, again 
line1 
line2 
end 

を含むファイルtextがあるとあなたは不定空白を処理するために(つまり、<space><star>ある)*を追加することができます。あなたの特定のケースで


2番目の行を削除したい場合は、それが

sed -e '/line1/{n;/line2/d}' text 
1

二行目と一致した場合、これはうまくいくかもしれない次の行に進めるためにブロック文を使用して、それを削除することができますあなたのために(GNU sed):

sed -i 'N;s/first line\nsecond line/replacement/;P;D' file ... 

パターンスペースに2行の移動ウィンドウを置き、必要に応じて置き換えます。

N.B. -iオプションを使用すると、ファイルが更新されます。

はまた、範囲および変更のコマンドを使用して:

sed -i '/first line/,/second line/c\replacement1\nreplacement2\netc' file ... 
+0

これもうまくいった、ありがとう! :) –

関連する問題