Como encontrar linhas no arquivo contendo um conjunto de caracteres especiais?

0

Estou escrevendo um script que executa um programa c existente e descobre se ele contém comentários:

Eles devem começar e terminar em tags de comentário:

/* and */ 

Como posso conseguir isso?

Exemplo: Isso funciona:

egrep "/\.*\./" sample.txt

Mas eu quero listar as linhas que começam e terminam com / * / only, por exemplo, considere esta entrada: hi / * / hello; este não é um comentário válido, mas estará na saída quando seu comando for usado.

    
por KLMM 26.09.2015 / 16:22

2 respostas

1

Para encontrar linhas contendo /* e */ , tudo que você precisa é

grep '/\*.*\*/' file

Para encontrar linhas que começam com /* e terminam com */ , use:

grep '^/\*.*\*/$' file

E para permitir espaços em branco antes do comentário inicial e depois do fim, use:

grep -E '^\s*/\*.*\*/\s*$' file

Como o * é um caractere especial, você precisa escapar dele ( \* ). Além disso, todo o resto é apenas um personagem regular. A regex acima corresponderá a /* , em vez de 0 ou mais caracteres ( .* ) até um */ .

    
por 26.09.2015 / 19:10
0

Uma abordagem é usar sed:

sed 's%. / *. * / %%; / ^ $ / d '

Por exemplo, para remover os comentários:

printf "hello\nx=1\n/* some comment */\nnot some comment\nthis has /* but no close\n" |
sed 's%.*/\*.*\*/%%; /^$/d'
    
por 26.09.2015 / 19:23