パターンに一致する「\」連続行を削除するには、「sed」を使用します。

パターンに一致する「\」連続行を削除するには、「sed」を使用します。

次のファイルがあります。

fff
ff
test 23 34 \
    45 44
rrr
bbb

このファイルから一致する行を削除したいが、改行をtestエスケープして行を続行し、\次の行はその行に属するものと見なす必要があります。

私がコマンドを実行すると

sed "/test/Id" file

testその行に属する次の行を含む行のみが削除されます。

\-continuedグループに属するすべての行を削除する方法は?

答え1

test一致後、パターンの末尾にaがなくなるまで行を累積し、パターンスペースを削除するループを入力します。\

$ sed '/test/{:a; /\\$/N; ta; d;}' file
fff
ff
rrr
bbb

答え2

でこれを行う方法がわかりませんが、sed次のawkプログラムは機能するはずです。

awk 'f{f--} /test/{f=1} (f && /\\$/){f=2} !f' file.txt
  • f現在の行がパターンと一致する場合、フラグは1に設定されます。
  • このフラグが設定されて行がaで終わると、2\にインクリメントされますf
  • f現在の行は、評価結果が0(つまりtrue)の場合にのみ印刷されます!f
  • フラグが行の先頭にセットされると、1 ずつ減少します。だから、先験的に直接一致する行のみが削除されます。改行のために増加すると、f現在の行はまだ除外されているとマークされます。2その行も続くと、次の行も表示され続けるようにfリセットされます。2

ノート残念ながら、これは一致するパターンが次の位置にある場合にのみ機能します。最初グループを継続する行。

答え3

GNUの使用sed

$ sed -Ez 's/test[^\n]*(\n|\\\n[^\n]*\n)//' input_file
fff
ff
rrr
bbb

関連情報