Почему ag печатает пустые строки из этого файла?

Попробуйте разбить операцию на несколько шагов, каждый из которых можно выполнить, используя разные программы с их базовыми функциями.

Например, сначала найдите шаблон /z ~/ и напечатайте следующие 6 строк (grep -A6 "z ~"), затем напечатайте 4-ю, 5-ю и 6-ю строки. столбцы. Наконец, отфильтруйте только те, в которых есть цифра, чтобы линия между совпадением шаблона и цифрами была отброшена.

Чтобы обернуть его в команду:

grep -A6 "z ~" file | awk '{ print $4, $5, $6 }' | grep -E "[[:digit:]]"`
0
11.08.2016, 01:54
1 ответ

Это не - контекст , а \ s * в начале вашего шаблона регулярного выражения. Кажется, что ag не выполняет построчный поиск, как обычный grep , а просматривает весь файл за один раз (или, по крайней мере, несколько строк за раз время). Немного похоже на этот однострочник Perl:

perl -0777 -ne 'print "$&\n" while /^\s*(def|class)\s+[_A-Za-z]*/msg' ../prog.py

Итак, поскольку \ s соответствует любому пробелу, включая символы новой строки, он соответствует предыдущей пустой строке, новой строке, пробелам перед следующей, а затем ключевое слово def . Если вы добавите пустую строку перед строкой blah , она не будет напечатана, поскольку blah не соответствует шаблону.

Чтобы избавиться от нежелательного совпадения, используйте / ^ * ... или / ^ [\ t] * ... вместо / ^ \ s * ... . (пробел + звездочка в первом)

4
28.01.2020, 02:19

Теги

Похожие вопросы