Talvez awk
seja uma ferramenta melhor para isso. Podemos lembrar quais foram os que imprimimos e não imprimi-los novamente com algo como:
awk '/ip address/ {print} /logging status/ {print} /snmp community/ {print} /ospf area/ {if(!ospf[$0]++) {print}}' "$file"
, que imprimirá todas as linhas que corresponderem aos seus primeiros exemplos de grep
(e cada uma é feita separadamente, caso você deseje apenas a primeira, caso contrário, você poderá combiná-las com |
). Para linhas que combinam ospf area
, construímos uma matriz de todas as linhas que já vimos e apenas a imprimimos se não vimos esta linha antes.
Isso imprimirá cada linha ospf area
exclusiva conforme escrita. Se você quiser apenas a primeira linha ospf area
e nenhuma outra, basta alterar a configuração da matriz para definir um int / flag:
awk '/ip address|logging status|snmp community/ {print} /ospf area/ {if(!ospf++) {print}}' "$file"
e se você não quiser lidar com nada diferente sobre as outras linhas, podemos simplificar usando o fato de que a ação padrão de awk
é imprimir a linha correspondente:
awk '/ospf area/ {if(!ospf++) {print}} /ip address|logging status|snmp community/' "$file"