Sem o IFS pode ser mais simples
grep edit addresses.txt | cut -d\" -f2 | while read addr
do
echo "addr=[$addr]"
grep -n "$addr" fortigate.conf
done
Estou tentando descobrir se uma definição de endereço é usada dentro do arquivo de configuração fortigate.
Eu extraí a seção do arquivo de configuração, que contém os endereços. Nessa seção, as linhas são assim:
edit "address name"
set associated-interface "someinterface"
set subnet 1.1.1.1 0.0.0.0
Então, agora eu queria usar o nome do endereço e verificar se alguma regra ou grupo de endereços usa isso, fazendo o seguinte:
IFS='
'
for address in $(grep edit addresses.txt | cut -c10- | sed 's/"//'g); do echo $address; grep -n $address fortigate.conf; done
A parte do IFS que tirei de aqui .
Isso me retorna uma lista de nomes de definições de endereços, mas o comando grep não encontra nada, o que é estranho, já que deveria pelo menos se encontrar, não?
Sem o IFS pode ser mais simples
grep edit addresses.txt | cut -d\" -f2 | while read addr
do
echo "addr=[$addr]"
grep -n "$addr" fortigate.conf
done
Seu comando cut
é muito agressivo. Se você executar apenas isso, verá o seguinte efeito:
$ grep edit yyyy
edit "address name"
$ grep edit yyyy |cut -c10-
ress name"
Ajuste seu cut
para isso:
$ grep edit yyyy |cut -c6-
"address name"
Talvez o espaço no nome do endereço esteja criando um problema. Experimente:
IFS='
'
for address in $(grep edit addresses.txt | cut -c10- | sed 's/"//'g); do echo $address; grep -n "$address" fortigate.conf; done
NOTA: existem citações em $ address quando o grepping
Tags bash grep sed bash-script