Допустим, у нас есть два файла.
match.txt: Файл, содержащий шаблоны для сопоставления:
fed ghi
tsr qpo
data.txt: Файл, содержащий строки текста:
abc fed ghi jkl
mno pqr stu vwx
zyx wvu tsr qpo
Теперь я хочу выполнить команду grep, которая должна вернуть первую и третью строку из data.txt:
abc fed ghi jkl
zyx wvu tsr qpo
... потому что каждая из этих двух строк соответствует одному из шаблонов в match.txt.
Я пытался:
grep -F -f match.txt data.txt
но это не дает результатов.
Информация о grep: GNU grep 2.6.3 (cygwin)
Информация об ОС: Windows 2008 R2
Обновить: Кажется, что grep сбивает с толку пробелы в строках шаблона поиска, но с флагом -F он должен обрабатывать каждую строку в match.txt как индивидуальный образец соответствия.
Решение этого заключается в следующем:
Используйте команду: tr -d "\r" <match.txt | grep -F -f - text.txt
Кажется, что grep
некорректно учитывает окончания строк Windows (CR / LF) для файлов совпадений, представленных ему через флаг -f. В tr
команда может использоваться для удаления возврата каретки из файла соответствия, а - специальный флаг может использоваться с grep
, чтобы заставить его прочитать файл соответствия со стандартного ввода.
Поскольку он работает в Unix, возможно, вам понадобится более поздняя версия grep?
>cat d
abc fed ghi jkl
mno pqr stu vwx
zyx wvu tsr qpo
>cat p
fed ghi
tsr qpo
>grep -F -f p d
abc fed ghi jkl
zyx wvu tsr qpo
что произойдет, если вы измените шаблоны на
fed\040ghi
tsr\040qpo