Regex inverso no AWK?

2

Estou tentando filtrar as linhas que contêm uma palavra específica. O regex é uma entrada de linha de comando para o script.

$0 ~ regex {
//Do something.
}

Exemplo de entrada é:

**String** **number**
domain  1
domain  2
bla     3

Assim, a partir da entrada acima, o usuário pode dizer - filtrar as linhas que têm a palavra "domínio".

O que eu tentei:

regex = "\?\!domain" 

(lookahead negativo).

Mas esse regex está filtrando todas as linhas. Não apenas as linhas com a palavra "domínio".

    
por Venkat Teki 25.10.2016 / 18:18

1 resposta

5

Para o arquivo de entrada fornecido input contendo o seguinte:

domain
demesne

Para filtrar por linhas que contenham domain :

$ awk '/domain/ { print }' input
domain

Para filtrar por linhas não contendo domain :

$ awk '!/domain/ {print }' input
demesne

Para filtrar com base no campo em vez da linha inteira, podemos tentar o seguinte para o novo arquivo input :

example www.example.com
exemplar www.example.net

Para filtrar as linhas em que o primeiro campo contém example :

$ awk '$1 !~ /example/ { print }' input
exemplar www.example.net

Na sua pergunta, você usou $0 , que é a linha inteira em vez do primeiro campo.

    
por 25.10.2016 / 19:29