Tentando remover linhas comentadas do código sem sorte

0

Tentando remover todas as linhas comentadas do código com sed:

1) /* ... */ e /* \n \n \n */

Tentei usar essa estrutura para ocultar o que está dentro

sed -n '/^\/\*/,/\*\//!p'

Mas parece ocultar o que há entre linhas diferentes e omite o /* .... */ in-line

Eu quero dizer que funciona aqui:

/******** 
This readme is intented ...
......
....
....
************/

Mas isso não funciona aqui:

/* Just a small bug */

Leva o primeiro /* encontrado e continua procurando por */ nas próximas linhas:

/* Just a small bug */
code
code
code
/*****
To sum up this shows us...
...
...
...
...
******/

Então todo o código abaixo "/ * Apenas um pequeno bug * /" está sendo escondido :( e eu sinto falta disso:

code
code
code

2) // inline: exluding http: // & https: // antes e incluindo se após

Estou tentando remover também strings & partes de strings que contêm // com:

sed 's/\/\/.*//'

que só é bem sucedido nesta implementação quando // está no início da linha:

sed 's/^\/\/.*//'

mas acaba removendo links inline como http:// e https://

code
code https://www.sample.com/abc     // include this URL
code https://www.sample.com/abc     // exclude this URL but leave alow https://anothersample.com/xyz
code

Tentei pesquisar os padrões de sed que pesquisam http:// e https:// , ignora-os e pesquisa inline por // e exclui tudo depois disso (ignorando http / https se eles estiverem localizados após // ), mas com sem sorte: (

Talvez alguém tenha uma boa idéia, seria incrível, obrigado mesmo assim!

    
por anaheimjogger 13.02.2017 / 10:26

1 resposta

3

Eu criei este pequeno arquivo de texto

/* one line comment */

some
multiple
code
here

/*****
multiple
line
comment
*****/

some code http://somelink
some code // some one line comment

Para este pequeno arquivo de teste, este comando funciona para remover todos os comentários que você mencionou

cat comments.txt | sed -n '/^\/\*.*\*\//!p' | sed -n '/ \/\/.*/!p' | sed 's|/\*|\n&|g;s|*/|&\n|g' | sed '/\/\*/,/*\//d'

Este comando está fazendo isso:

  1. sed -n '/^\/\*.*\*\//!p' : remove todos os comentários de uma linha, como /* one line comment */ , do arquivo de teste

  2. sed -n '/ \/\/.*/!p' : remove todos os comentários de uma linha, como // some one line comment , mas mantém http:// links. Isso pode ser feito por causa do espaço em branco nesta parte / \/\/ . Eu acho que você pode mudar isso em /\s\/\/

  3. sed 's|/\*|\n&|g;s|*/|&\n|g' | sed '/\/\*/,/*\//d' : remove todas as linhas de comentários múltiplos, como na amostra, mas mantém o código.

por 14.02.2017 / 08:35