Можно ли (и как) связать шаблоны с ack (ack-grep в некоторых дистрибутивах Linux), как я привык с grep?
e.g.
grep "foo" somefile.c | grep -v "bar"
... чтобы сопоставить все строки с "foo", но без "bar".
Можно ли (и как) связать шаблоны с ack (ack-grep в некоторых дистрибутивах Linux), как я привык с grep?
e.g.
grep "foo" somefile.c | grep -v "bar"
... чтобы сопоставить все строки с "foo", но без "bar".
ack
использует регулярные выражения Perl, и они допускают предварительные утверждения:
^(?!.*bar).*foo.*$
будет соответствовать строке, которая содержит foo
, но не содержит bar
.
Я не знаком с использованием ack
, но что-то вроде этого должно работать:
ack '^(?!.*bar).*foo.*$' myfile
bar
, поиск foo
даже не производится.
- person Anthony Hatzopoulos; 24.11.2015
foo()
, но не foo(bar)
, мне все равно нужны все остальные foos. В моем случае somefile.c
— это целый проект. Хотя стоило упомянуть.
- person Anthony Hatzopoulos; 24.11.2015
.
не соответствует новой строке, поэтому просмотр вперед всегда будет смотреть вперед только на одну строку. Но это не имеет значения для ack
, так как он все равно работает построчно. Он никогда не просматривает весь файл.
- person Tim Pietzcker; 24.11.2015
-l
для печати только имен файлов, содержащих совпадения, и это не сработало.
- person Anthony Hatzopoulos; 24.11.2015