grep; Obtendo padrões de um arquivo, ignorando o caso

0

Eu não estou familiarizado com o Unix e estou tentando entender como executar grep através de uma lista de arquivos de texto, usando padrões armazenados em um arquivo de texto chamado searchlist.txt. O arquivo de texto é uma nova lista de nomes separados por uma linha semelhante a esta:

"washington, martha"

"adams, jane"

E eu preciso procurar por esses nomes em alguns arquivos de texto muito grandes. Eu também preciso ignorar o caso. Eu criei grep -i -f searchlist.txt *.txt , mas a única saída que estou obtendo é assim:

"adams, jane":"washington, martha"

Eu sei com certeza que esses nomes estão em algum lugar nos arquivos de texto. Gostaria de saber se existe alguma maneira específica que o searchlist.txt precisa ser formatado? Existe alguma maneira que eu preciso especificar no comando que esta lista é separada por novas linhas?

    
por user209924 11.01.2017 / 21:38

1 resposta

0

Se você tiver um arquivo chamado 'needles' contendo o seguinte:

washington, martha
adams, jane

E um arquivo chamado 'haystack' contendo o seguinte:

blah blah blah washington, martha blah
all work and no play
makes adams, jane a dull
girl

Você deve poder usar grep -i -f needles haystack .

Se, no entanto, "agulhas" contiver:

"washington, martha"
"adams, jane"

você precisará usar grep -i -f <(sed 's/"//g' needles) haystack para retirar as aspas duplas dos nomes. A menos que você queira procurar apenas os nomes quando citados.

Naturalmente, isso não funcionará para casos de 'palheiro', como

And on that day she changed her name to adams,
jane.

Se alguém na sua lista é inspirado pelo Artista Anteriormente Conhecido como o Artista Anteriormente Conhecido como Príncipe e decidiu colocar uma aspa dupla em seu nome real, você pode tornar o sed um pouco mais explícito e a citação inicial e final de cada linha com grep -i -f <(sed 's/^"//;s/"$//' needles) haystack .

    
por 11.01.2017 / 21:41

Tags