2013-09-07 2 views
3

Предположим, у меня есть queries.txt.grepping lines из документа с использованием xargs

queries.txt:

cat 
dog 
123 

теперь я хочу, чтобы использовать их в запросы для поиска строки в myDocument.txt с помощью Grep.

cat queries.txt | xargs grep -f myDocument.txt 

myDocument имеет линии как

cat 
i have a dog 
123 
mouse 

он должен вернуть первые 3 строки. но это не так. вместо этого grep пытается найти их как имена файлов. Что я делаю не так?

ответ

7

Здесь вам просто необходимо:

grep -f queries.txt myDocument.txt 

Это заставляет grep читать регулярные выражения из файла queries.txt, а затем применить их к myDocument.txt.

В версии xargs, вы эффективно писать:

grep -f myDocument.txt cat dog 123 

Если вы абсолютно необходимо использовать xargs, то вам нужно написать:

xargs -I % grep -e % myDocument.txt < queries.txt 

Это позволяет избежать UUOC - Бесполезные Использование от cat - награда путем перенаправления стандартного ввода от queries.txt. Он использует опцию -I %, чтобы указать, где текст замены должен идти в командной строке. Использование опции -e означает, что если шаблон имеет значение, например --help, вы не столкнетесь с проблемами с (GNU) grep, рассматривая это как аргумент (и, следовательно, печатайте его справочное сообщение).

1

Опция grep-e принимает в качестве аргумента строку шаблона. -f рассматривает аргумент как имя файла файла с шаблонами в нем.