C 스타일 여러 줄 주석 구문 분석

C 스타일 여러 줄 주석 구문 분석

sed주석 처리되지 않은 자바스크립트를 필터링 하고 줄 번호를 출력하고 싶습니다.

예는 다음과 같습니다.

/*!
* 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
*/

누군가 나에게 다음과 같이 grep -n정규식을 사용하라고 말했습니다.sed

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

그것은 나에게 출력을 제공합니다 :

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  

하지만 나는 출력을 원한다:

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  

정규식에 문제가 있나요?

답변1

내부 주석(/* .*? */)은 공백이 아닌 줄을 제외한 모든 항목을 제거합니다.

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

출력:

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

답변2

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

관련 정보