Você não explicou o que está fazendo, então vou fazer algumas suposições. Eu suponho que você está executando um script chamado foo.sh
e dando a ele uma string e um nome de arquivo como argumento. Estes então se tornam
e
, respectivamente. Presumivelmente, você está executando com algo semelhante a
foo.sh SearchPattern LogFileName
Em qualquer caso, o loop for
é i) completamente inútil, já que você não está usando a variável i
criada pelo loop for i in ...
. ii) muito errado, já que isso fará com que i
tome o valor de cada palavra e não a linha inteira, que provavelmente você estava pensando iii) a causa de todos os seus problemas. Você está obtendo os mesmos resultados várias vezes porque está executando o mesmo comando várias vezes. Você obterá um resultado para cada linha do seu arquivo.
De qualquer forma, o que você quer pode ser feito com algo tão simples como
grep "" ~/jlog/"" | awk '/\([a-zA-Z0-9.]+/ {print }'
Ou mais simples:
awk '/'""'/\([a-zA-Z0-9.]+/ {print }' ~/jlog/""
O awk
observa que ""
não está entre as aspas simples. Isso faz com que o bash o expanda para o que estiver atualmente em
antes de ser passado para awk
.