Зробіть пропуск xargs як перший параметр


53

Я намагаюся створити таку поведінку:

grep 192.168.1 *.txt

Передаючи рядок у grep через Xargs, але він іде в кінці замість першого параметра.

echo 192.168.1 | xargs grep  *.txt

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

Як це зробити?


Відповіді:


83
$ 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.

Дякую, це працює. Але чому? Чим ти замінюєш -І? Я не розумію.
e18r

6
Здається, фігурні дужки - це місце, що займає місце. Ви можете замінити {} на що завгодно: 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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.