Grep string apenas na linha não comentada

2

Como posso grep a string que está apenas na linha descomentada? Eu não quero que o resultado seja incluído para string na linha comentada. Por exemplo: No arquivo.tx

My name is Jane
#My name is Sara

Eu quero grep word "name" e imprimo a saída, como abaixo: -

My name is Jane

Mas não quero que a linha comentada seja exibida.

Obrigado

    
por daffodil 28.11.2018 / 10:32

3 respostas

0

Se você quiser imprimir a linha que não está comentada em um arquivo, os comandos abaixo são úteis.

grep -v '^ *#' filename.txt  | grep searchstring

-v -> Inverse
-v "^ *#" -> Print the lines without "#" in the starting line (# ABC - This line is also avoided)

Funcionou para mim por um longo tempo & Eu uso isso para exibir os trabalhos ativos do crontab.

    
por 28.11.2018 / 12:12
1

Sem mais detalhes, não é possível dar uma resposta perfeita. Você pode executar algo nos seguintes termos:

remove the comments (and maybe literal strings)   | 
grep in the output

Remover comentários (multilinha ou não) pode ser complicado ... Precisamos de pelo menos um analisador léxico específico de idioma para lidar corretamente com ele.

De qualquer forma, podemos escrever um hack rápido (que não é tão robusto) Seguindo um exemplo com comentários C:

   perl -0pe 's!/\*.*?\*/!!gs' x.c   | grep searchstring
    
por 28.11.2018 / 12:27
0

Algo como isso poderia funcionar (supondo que linhas comentadas comecem com um sinal # ):

grep -v '^#' myfile.txt | grep string_to_search

Você pode substituir # por qualquer símbolo que indique uma linha de comentário ( C , c , d , D , * ou ! , por exemplo.)

    
por 28.11.2018 / 10:41

Tags