正規表現の一致後に行を検索して置換するには、「sed」を使用します。

正規表現の一致後に行を検索して置換するには、「sed」を使用します。

では簡単になりそうですが、そうできるかどうか疑問にawk思います。sedこれは私の入力です。

line 1
line 2
line 3
line 1
line 2
line 3
line 1
line 2
line 3

line 12番目の正規表現を見つけ、それ以降に見つかったすべてを変更するために内部正規表現を作成したいと思いますline 3。出力は次のとおりです。

line 1
line 2
line 3
line 1
line 2
replaced
line 1
line 2
replaced

私は実際にこの入力でのみ動作する「賢い」ソリューションを探しているわけではありません。一般的な検索と置換方法があるかどうかを知りたいです。後ろにと一致しますsed

解決策はどこかにあると思いました。addr出荷書類ビーチ、ところでできることだと説明されていないようで/starting point/,s/...、しようとするとエラーが出ます。

ベストアンサー1

そのためには、目標線を見た回数を数える必要があります。残念ながら、何でも計算するのはsedPITAです。awkまたはでこれを行うことをお勧めしますperl。たとえば、

$ perl -p -e '$found++ if m/line 1/;
              next if $found < 2;
              s/line 3/replaced/' input.txt 
line 1
line 2
line 3
line 1
line 2
replaced
line 1
line 2
replaced

またはawk:

$ awk '/line 1/ { found++ };
       found < 2 { print ; next };
       { sub(/line 3/,"replaced") ; print }' input.txt 
line 1
line 2
line 3
line 1
line 2
replaced
line 1
line 2
replaced

これらの方法は効果的ですが、最高のソリューション、特にawkバージョン(Perlを直接翻訳したもの)とは遠いです。

ところで、どちらのバージョンも正規表現を使って検索し、計算、検索する正規表現、変える、代替文字列、さらに必要な数までスクリプトにハードコードする代わりに、コマンドラインオプションとして使用できます。

おすすめ記事