Ustaw xargs jako pierwszy parametr


53

Próbuję wywołać takie zachowanie:

grep 192.168.1 *.txt

Przekazując ciąg znaków do grep przez Xargs, ale kończy się on jako pierwszy parametr.

echo 192.168.1 | xargs grep  *.txt

Muszę powiedzieć xargs (lub coś podobnego), aby umieścił przychodzący ciąg między „grep” i „*” zamiast na końcu.

Jak mam to zrobic?


Odpowiedzi:


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

Przykład

Przykładowe pliki:

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

Przykładowy przebieg:

$ echo 192.168.1. | xargs -I{} grep {} *.txt
1.txt:192.168.1.
2.txt:192.168.1.
3.txt:192.168.1.

Dzięki, działa. Ale dlaczego? Co zamieniasz na -I? Nie rozumiem
e18r

6
Wygląda na to, że nawiasy klamrowe to symbol zastępczy. Możesz zastąpić {} czymkolwiek chcesz: echo 192.168.1. | xargs -I folder grep pholder * .txt
denormalizer

3

Inne podejście:

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

Nie spowoduje to przepełnienia długości wiersza poleceń powłoki zbyt dużą liczbą nazw plików. Aby uniknąć mylenia xargs/ grepz nazwami plików, które mają spacje, -print0a -0opcje będą określać każdą znalezioną nazwę z wartością null zamiast z LF.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.