Faça xargs passar como primeiro parâmetro

44

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?

    
por andy boot 20.09.2013 / 14:12

2 respostas

67
$ 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.
    
por 20.09.2013 / 14:19
3

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.

    
por 09.09.2014 / 15:30

Tags