grep para cadeias de caracteres que foram encontradas em uma instrução anterior

1

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?

    
por user857990 17.07.2013 / 13:43

3 respostas

1

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

    
por 16.02.2014 / 05:28
0

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"
    
por 17.07.2013 / 13:59
0

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

    
por 17.07.2013 / 15:28