$ echo 192.168.1. | xargs -I{} grep {} *.txt
Exemplo
Arquivos de amostra:
$ cat {1..3}.txt
192.168.1
192.168.1
192.168.1
Exemplo de execução:
$ echo 192.168.1. | xargs -I{} grep {} *.txt
1.txt:192.168.1.
2.txt:192.168.1.
3.txt:192.168.1.
Estou tentando produzir esse comportamento:
grep 192.168.1 *.txt
Passando uma string para o grep via Xargs, mas ela está indo no final, em vez de como o primeiro parâmetro.
echo 192.168.1 | xargs grep *.txt
Eu preciso dizer ao xargs (ou algo semelhante) para colocar a string de entrada entre 'grep' e '*' em vez de no final.
Como faço isso?
$ echo 192.168.1. | xargs -I{} grep {} *.txt
Arquivos de amostra:
$ cat {1..3}.txt
192.168.1
192.168.1
192.168.1
Exemplo de execução:
$ echo 192.168.1. | xargs -I{} grep {} *.txt
1.txt:192.168.1.
2.txt:192.168.1.
3.txt:192.168.1.
Outra abordagem:
find . -name \*.txt -print0 | xargs -0 grep 192.168.1
Isso não sobrecarregará o comprimento da linha de comando do shell com muitos nomes de arquivos. Para evitar confundir xargs / grep com nomes de arquivos que possuem espaços, as opções -print0 e -0 irão delinear cada nome encontrado com um nulo em vez de um LF.
Tags xargs