web-dev-qa-db-ja.com

負の一致を持つ正規表現(つまり、正規表現と一致しない文字列を見つける)

一部の行に「ERROR」という文字列が含まれるログファイルがあります。 ないエラーのあるすべての行を削除して、修正が必要なものだけを確認できるようにします。私はvimで次のようなことをするつもりでした:

%s /!(エラー)//

エラー以外の行を空の文字列に置き換えます。

標準の正規表現でこれができるとは思いませんが、間違っているかもしれません...

30
Alexander Bird

使用 :g!コマンドで一致しないすべての行を削除します。

:g!/ERROR/d
53
too much php

Vimでは、バッファー内のテキストに対して任意のフィルターコマンドを実行できます。例えば、

:%!grep ERROR

バッファ全体を、指定された正規表現に一致する行のみに置き換えます。

これは、grep以外にも役立ちます。たとえば、バッファ内の行を:%!sortで並べ替えることができます。または、Vコマンドを使用してブロックをマークしてから:!filter-commandを使用して、任意の範囲のテキストに対して同じことを行うことができます(vimは自動的に'<,'>を入力して、現在マークされていることを示しますブロック)。

8
Greg Hewgill

負の先読み を使用すると機能しました。

1
Alexander Bird

* nixの場合、grep-vまたはawkを使用できます

awk '!/ERROR/' file | more 

windowsマシンでは、findstrを使用できます

findstr /v /c:ERROR file | more
1
ghostdog74

負に一致する正規表現は^を使用します。 [^ E]はE以外のすべてに一致します。

0
Jaelebi