за символом grep не следует символ

Я пытаюсь напечатать строки, за которыми b не следует e в файле. Я пытался использовать отрицательный прогноз, но он не работает.

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

Когда я запускаю эти команды, ничего не появляется, никаких ошибок или чего-то еще. Я также проверял похожие сообщения других людей, но не смог запустить его.


person Community    schedule 22.04.2016    source источник
comment
grep "b[^e]" filename.txt может это сделать? Или с ' в Linux. Что, если вы используете grep -E для расширенной поддержки регулярных выражений?   -  person TessellatingHeckler    schedule 22.04.2016
comment
Из этой темы stackoverflow.com/a/9198987 обходы не поддерживаются в стандартном grep, но в GNU grep grep -P может использовать Perl-совместимость регулярные выражения и поддерживать его.   -  person TessellatingHeckler    schedule 22.04.2016


Ответы (2)


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

Это должно соответствовать «b», за которым следует символ, отличный от «e» или «b» в конце строки.

person pilcrow    schedule 22.04.2016

Если ваш grep поддерживает регулярные выражения Perl с -P, поиск работает:

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

Единственное отличие от grep -E (в данном случае) заключается в том, что вам не нужно заботиться о ситуации с концом строки (см. ответ Пилкроу).

person Benjamin W.    schedule 22.04.2016