Извлечение совпадающих слов с помощью grep в Cygwin

Если файлы отсортированы, стандартный инструмент для этого - comm :

comm -2 file1 file2

Параметр -2 предназначен для подавления строк печати, уникальных для file2 .

Он не дает точный формат, который вы указали. Однако вы можете проанализировать его, чтобы получить такой результат, если хотите. (Стандартные инструменты и стандартные форматы обычно довольно хорошо продуманы.)

2
26.02.2017, 23:17
2 ответа

Должны быть более элегантные решения (возможно, grep -P - одно из них?), Но вы можете использовать sed ] для имитации grep и получения нужных строк в случаях, когда простого grep -o недостаточно:

sed -nr 's/.*SYSTEM "..\/blah\/([^"]*).*/\1/p'

Это будет соответствовать всей строке, а затем полностью заменить ее с подстрокой, которую вы искали.

2
27.01.2020, 22:10

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

GNU grep, версия, включенная в Cygwin, имеет возможность отображать только ту часть строки, которая соответствует шаблону: -o .

grep -o 'abc[0-9][^"]*' file1

Вы можете добавить \ b в начало шаблона, чтобы соответствовать только после пробелов или знаков препинания, т.е. чтобы избежать совпадения /fooabc123.xyz . Если вы хотите найти соответствие после / или ", в вывод будет включен знак препинания; этого можно избежать с помощью утверждения просмотра назад , которое является доступно в синтаксисе регулярных выражений Perl.

grep -o -P '(?<=[/"])abc[0-9][^"]*' file1
0
27.01.2020, 22:10

Теги

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