3

次のようなデータを含む非常に大きなテキストファイルがあります。

he/PRP have/VBD obtain/VBN the/DT ##archbishopric/NN## against/IN the/DT monk/NNS of/IN the/DT

craft/NN ,/Fc he/PRP obtain/VBD the/DT ##archbishopric/NN## of/IN besancon/NP ;/Fx and/CC have/VBD it/PRP in/IN
======>match found: \#\#\sof\/IN

succeed/VBN to/TO the/DT ##archbishopric/NN## ./Fp

klutzy/NN little/JJ ##scene/NN## where/WRB 1/Z brave/JJ french/JJ man/NN refuse/VBZ to/TO sit/VB down/RP for/IN fear/NN of/IN be/VBG discover/VBN ./Fp
======>match found: \#\#\swhere\/WRB\s

grepを使用して、次のように、 =====> match found:の新しい行文字の直後に続く「text」の行を含むすべての行を一致させて消去したいと思います。

craft/NN ,/Fc he/PRP obtain/VBD the/DT ##archbishopric/NN## of/IN besancon/NP ;/Fx and/CC have/VBD it/PRP in/IN
======>match found: \#\#\sof\/IN

改行文字で終わります。

したがって、前の例によれば、grepを実行して、次の出力を取得したいと思います。

he/PRP have/VBD obtain/VBN the/DT ##archbishopric/NN## against/IN the/DT monk/NNS of/IN the/DT

succeed/VBN to/TO the/DT ##archbishopric/NN## ./Fp

私はすでに試しました:grep -E -v '^.+\n======>match found:.+$' file.txt

前の行を含めるためにコマンドに正規表現を追加することによってここで提案されているように、それは機能していません、何か提案はありますか?.+*\n

4

2 に答える 2

1

このsedコマンドはあなたが望むものに近いです:

$ sed -n 'N;/\n======>match found:/d; P;D' textfile 
he/PRP have/VBD obtain/VBN the/DT ##archbishopric/NN## against/IN the/DT monk/NNS of/IN the/DT


succeed/VBN to/TO the/DT ##archbishopric/NN## ./Fp
于 2013-01-24T09:44:26.007 に答える
0

複数行のgrepは、従来のgrep実装では一度に1行しか考慮され\nないため、パターンに追加しても意味がありません。

pcregrepを使用できる場合は、-Mフラグを使用して複数行のマッチングを実行できます。

pcregrep -Mv '^.+\n======>match found:.+$'

出力:

he/PRP have/VBD obtain/VBN the/DT ##archbishopric/NN## against/IN the/DT monk/NNS of/IN the/DT


succeed/VBN to/TO the/DT ##archbishopric/NN## ./Fp
于 2013-01-24T09:47:54.120 に答える