Сделать XARGS передать в качестве первого параметра

53

Я пытаюсь произвести это поведение:

grep 192.168.1 *.txt

Передав строку в grep через Xargs, но она идет в конце, а не в качестве первого параметра.

echo 192.168.1 | xargs grep  *.txt

Мне нужно сказать xargs (или что-то подобное), чтобы поместить входящую строку между 'grep' и '*' вместо конца.

Как мне это сделать?

Энди бот
источник

Ответы:

84
$ echo 192.168.1. | xargs -I{} grep {} *.txt

пример

Примеры файлов:

$ cat {1..3}.txt
192.168.1
192.168.1
192.168.1

Пример выполнения:

$ echo 192.168.1. | xargs -I{} grep {} *.txt
1.txt:192.168.1.
2.txt:192.168.1.
3.txt:192.168.1.
SLM
источник
Спасибо, это работает. Но почему? Что вы заменяете на -I? Я не понимаю
e18r
7
Кажется, что фигурные скобки являются заполнителем. Вы можете заменить {} на что угодно: echo 192.168.1. | xargs -I pholder grep pholder * .txt
денормализатор
3

Другой подход:

find . -name \*.txt -print0 | xargs -0 grep 192.168.1

Это не приведет к переполнению длины командной строки оболочки слишком большим количеством имен файлов. Во избежание путаницы xargs/ grepс именами файлов, которые имеют пробелы, -print0и -0параметры будут обозначать каждое найденное имя с нулем, а не LF.

Билл Хоаг
источник