2016-04-22 24 views
2

eの後にbがない行を印刷しようとしています。私は否定的な先読みを使ってみましたが、うまくいきません。grep文字の後ろに文字がありません

grep 'b(?!e)' filename 
grep '(?!e)b)' filename 
egrep 'b(?!e)' f3.txt 

これらのコマンドを実行すると、何も表示されず、エラーも何も表示されません。他の人の同様の投稿もチェックしましたが、実行できませんでした。エンド・オブ・ラインで「E」でない文字が続く「B」、または「B」と一致すべきである

+1

'grep" b [^ e] "filename.txt'はそれを行う可能性がありますか? Linuxでは '' 'を使ってください。拡張正規表現のサポートに 'grep -E'を使うとどうなりますか? – TessellatingHeckler

+0

このスレッドhttp://stackoverflow.com/a/9198987のlookaroundsは標準のgrepではサポートされていませんが、GNU grepでは 'grep -P'はPerl互換の正規表現を使用してサポートしています。 – TessellatingHeckler

答えて

2

grep -E 'b([^e]|$)' filename

1

あなたのgrepが-PとPerlの正規表現をサポートしている場合は、ルックアラウンドが動作:

$ grep -P 'b(?!e)' <<< 'be'  # Gets no output 
$ grep -P 'b(?!e)' <<< 'bb' 
bb 
$ grep -P 'b(?!e)' <<< 'b' 
b 

(この場合)grep -Eへの唯一の違いは、エンドの世話をする必要がないことです(pilcrow's answerを参照)。

関連する問題