bash: executa o comando várias vezes com uma lista de valores

1

Eu preciso executar um comando várias vezes, cada vez com um novo valor:

grep VALUE0 myfile.txt
grep VALUE1 myfile.txt
grep VALUE2 myfile.txt

Porque o comando grep é "criado" ad hoc (nem sempre é o mesmo) e somente a lista de VALUEs é sempre a mesma que eu não quero colocar o comando grep em um loop dentro de um arquivo bash. Eu preferiria manter minha lista de VALUEs em um arquivo separado como "valores.txt" e permitir que um comando shell ad-hoc faça um loop sobre essa lista de valores lidos em "values.txt".

    
por tschloss 08.04.2013 / 14:24

3 respostas

2

Do manual grep :

-f FILE, --file=FILE

Obtain patterns from FILE, one per line. The empty file contains zero patterns, and therefore matches nothing. (-f is specified by POSIX.)

Você pode criar um arquivo com os padrões, um por linha, e apenas executar grep -f patternfile … . Talvez não se encaixe em você, mas é difícil saber sem exemplos explícitos.

    
por 08.04.2013 / 15:06
2

Você pode fazer isso usando xargs :

xargs -a values.txt -I {} grep {} myfile.txt

Isso significa que o arquivo values.txt é lido, uma linha por vez, então o comando grep ... myfile.txt é executado, onde ... está sendo substituído pelo conteúdo da linha lida (usei {} porque é isso que o find também usa.)

Dito isto, também posso dizer que com

egrep 'VALUE0|VALUE1|VALUE2' myfile.txt

você pode pesquisar mais de um texto por vez.

    
por 08.04.2013 / 14:35
0

Tente isto:

#!/bin/bash

while read value
do
    grep $value myfile.txt
done < values.txt

Mantenha o arquivo values in values.txt , cada um em uma linha separada.

    
por 08.04.2013 / 14:46

Tags