Предположим, мы выполняем многострочный поиск по шаблону регулярного выражения в группе файлов и хотим извлечь совпадения из grep. По умолчанию grep выводит совпадения, разделенные символами новой строки, но поскольку мы используем многострочные шаблоны, это создает неудобство, заключающееся в том, что мы не можем легко извлечь отдельные совпадения.
Пример
grep -rzPIho '}\n\n\w\w\b' | od -a
В зависимости от файлов в вашем файловом дереве это может привести к выводу, например
0000000 } nl nl m y nl } nl nl i f nl } nl nl m
0000020 y nl } nl nl m y nl } nl nl i f nl } nl
0000040 nl m y nl
0000044
Как видите, мы не можем разбить символы новой строки, чтобы получить совпадения для дальнейшей обработки, поскольку совпадения сами содержат символы новой строки.
Что не работает
Теперь --null
(или -Z
) работает только в сочетании с -l
, что заставляет grep отображать только имена файлов вместо совпадений, так что здесь это не помогает.
Обратите внимание, что это не дубликат Есть ли эквивалент grep для ключей find -print0 и xargs -0?, потому что требования в этом вопросе разные, что позволяет ответить на него, используя альтернативные методы.
Итак, как мы можем заставить это работать? Может быть, использовать grep в сочетании с другими инструментами?