Несколько альтернатив:
awk '! (/foo/ && !/bar/)'
awk '/bar/ || !/foo/'
sed -e /bar/b -e /foo/d
sed '/foo/{/bar/!d;}'
perl -ne 'print unless /foo/ && !/bar/'
GNU grep
с поддержкой PCRE:
grep -vP '^(?!.*bar).*foo'
(используя оператор PCRE отрицательный оператор look-ahead (?!...)
).
Из них только perl
позволяет осуществлять редактирование вручную (на системах, где установлена любая версия perl
) с опцией -i
.
Стандартный sed
не делает редактирования на месте. Однако sed
некоторых недавних BSD позволяет использовать опцию -i ''
и GNU sed
с -i
(оба моделированы после perl
) в качестве расширения.
Современные версии GNU awk
также позволяют использовать -i на месте
.