grep para corresponder ao padrão, somente se houver alguns caracteres alfanuméricos depois

0

Como pular comentários vazios no exemplo abaixo? Quero que grep corresponda a comments , apenas se houver alguns caracteres alfanuméricos depois disso.

$cat file | grep 'Object Name:\|manual_encdomain:\|comments: *'
Object Name: ABC
    comments: This is non emtoy comment
            comments: 
            comments: 
                comments: 
                comments: 
                comments: 
    manual_encdomain: Name: net_1.1.1.1_24 (Table: network_objects)

, então a saída desejada está abaixo:

Object Name: ABC
    comments: This is non emtoy comment     
    manual_encdomain: Name: net_1.1.1.1_24 (Table: network_objects)
    
por irom 14.09.2017 / 19:01

2 respostas

2

Use a classe de caractere [[:alnum:]] com uma ou mais ocorrências.

grep 'Object Name:\|manual_encdomain:\|comments: [[:alnum:]]\+' in

Você pode usar [0-9A-Za-z] , que é o que a classe de caractere [[:alnum:]] está combinando.

Ou use reversa grep -v ... com a classe de caractere [[:space:]] :

grep -v 'comments:[[:space:]]*$' in

Observe também que grep pode ler a partir do arquivo de entrada não é necessário usar cat file | ... extra.

    
por 14.09.2017 / 19:08
1

Assumindo que você quer dizer se houver pelo menos um caractere alfanumérico entre os caracteres que o seguem, seria:

<file grep -E 'Object Name:|manual_encdomain:|comments:.*[[:alnum:]]'

Isso é comments: seguido por qualquer número ( * ) de qualquer caractere ( . ) seguido por um caractere alfanumérico (ou você pode usar [^[:space:]] em vez de [[:alnum:]] para qualquer caractere, exceto um espaçamento ).

Observe que \| não é padrão / portátil. Alternação é um recurso de expressões regulares estendidas padrão que grep entende com -E (padrão).

Você precisaria de cat se quisesse concatenar vários arquivos. O shell pode abrir o file para torná-lo diretamente stdin de grep (em oposição a um canal) como acima ou você pode até passar o nome do arquivo como argumento para grep para grep abrir e ler em si.

    
por 15.09.2017 / 08:43