Вопрос по – О 'grep -f': сопоставить шаблон с файлом

8

Я используюgrep -f функция для извлечения строк из файла, которые соответствуют определенному шаблону. Допустим, мой файл шаблонаpattern.txt, следующее.

1
2
3
4
5

И файл, с которым я сопоставляю этот шаблонfile.txt,

1::anv
2::tyr
3::yui
4::fng
5::gdg
6::ere
7::rer
8::3rr
9::gty

Теперь, когда я выполняю команду grep -f pattern.txt file.txt, я получаю это - & gt;

1::anv
2::tyr
3::yui
4::fng
5::gdg
8::3rr

Последняя строка в выводе выше, вызывает мою проблему. Как мне изменить эту команду grep, чтобы получить вывод (показывающий правильные соответствия) следующим образом?

1::anv
2::tyr
3::yui
4::fng
5::gdg
Я попробовал grep & quot;more patt.txt& Quot; file.txt | awk -F "::" & quot; {печатать $ 1 & quot; & Quot; $ 2} & APOS; Но это также дает мне ту же проблему. ana

Ваш Ответ

2   ответа
12

добавлять^ перед вашими образцами, чтобыgrep будет соответствовать началу строки с вашим шаблоном. Если ваш шаблон на самом деле представляет собой набор чисел, вам не нужен список шаблонов. Просто используйте^[1-5]:.

Благодарю. это сделал ana
просто знайте, что ^ 1 будет соответствовать 10: и т. д., если числа когда-либо станут такими большими.
6

Ну, есть много возможных решений. Вы говоритеgrep найти все строки, содержащие 3, и строку "8 :: 3rr"; на самом деле содержит 3. так что вам нужно быть более конкретным в том, что вы ищете.

Например, вы можете изменить шаблоны на «1:», «2:» и т. Д., Чтобы соответствовать только числам, за которыми следует двоеточие. Или вы можете изменить их на «^ 1», «^ 2» и т. Д., Чтобы они соответствовали только числам в начале строки. Это зависит от ваших данных, но, вероятно, вы хотите и того, и другого, так что ваш поиск по запросу "1:" не совпадает с 21: и ваш поиск "^ 5"; не соответствует "53:". В этом случае ваш файл шаблонов будет выглядеть так:

^1:
^2:
^3:
^4:
^5:

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