Parsing C Style Multiline Comment

1

Eu quero filtrar o javascript não comentado com sed e exibir o número da linha

Aqui está o exemplo:

/*!
* jQuery UI 1.8.17
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI
*/(function(a,b){function d(b)       {return!a(b).parents().andSelf().filter(f/*!
* jQuery UI Widget 1.8.17
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Widget
*/(function(a,b){if(a.cleanData){var  c=a.cleanData;a.cleanData=function(b/*!
* jQuery UI Mouse 1.8.17
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Mouse
*
* Depends:
*   jquery.ui.widget.js
*/

Alguém me disse para usar grep -n e sed regex assim:

grep -n "" test.js | sed ':a;$!N;$!ba;s/\/\*[^*]*\*\([^/*][^*]*\*\|\*\)*\///g'

Isso me dá saída:

1:(function(a,b){function d(b){return!a(b).parents().andSelf().filter(f(function(a,b){if(a.cleanData){var c=a.cleanData;a.cleanData=function(b  

Mas eu quero saída:

9: (function(a,b){function d(b){return!a(b).parents().andSelf().filter(f
17: (function(a,b){if(a.cleanData){var c=a.cleanData;a.cleanData=function(b  

Há algo de errado com o regex?

    
por Lazuardi N Putra 30.03.2015 / 06:35

2 respostas

1

Dentro dos comentários (/ *. *? * /) remova tudo, exceto as novas linhas; grep linhas não vazias:

perl -p0E 's!(/\*.*?\*/)!$1 =~ s/.//gr!egs;' test.js |grep -nP '\S'

quais saídas:

9:(function(a,b){function d(b)       {return!a(b).parents().andSelf().filter(f
17:(function(a,b){if(a.cleanData){var  c=a.cleanData;a.cleanData=function(b
    
por 30.03.2015 / 11:10
0

Usando o Awk:

awk '/^*\/\(/ {gsub(/\*\/|\/\*!/,""); print NR":",$0}' js
9: (function(a,b){function d(b)       {return!a(b).parents().andSelf().filter(f
17: (function(a,b){if(a.cleanData){var  c=a.cleanData;a.cleanData=function(b
    
por 30.03.2015 / 07:27