2012-08-28 2 views
0

왜 이것이 작동하지 않는지 혼란 스럽습니다. 뭔가 좀 더 복잡하게하려고 노력하지만, 내 문제의 핵심은 한 줄짜리 C- 코멘트와 일치하는 것입니다.C 스타일 (한 줄짜리) 주석 Sed 대체

myfile :

/* a comment */ 

실행 :

sed 's|/\*\([.]*\)\*/|\1|' ./myfile 

가 일치하지 않습니다/교체합니다.

왜 그럴까요? 나는 그것들을 부분들로 나누었고 그것들은 개별적인 조각들 (개구부 /*, 물건들, 닫는 것 */, 그리고 조합들 (시작/중간과 중간/끝)을 가지고 작동하는 것처럼 보인다. ?.

나는 무엇을 놓치고 오전 [.]*는 0 개 이상의 점의 문자열을 찾고

답변

2

을 당신은 .는 메타 문자가되고 싶어요, 그것의 주위에 대괄호를 제거

sed 's|/\*\(.*\)\*/|\1|' ./myfile 

참고. 이것이 욕심 많은 매칭 알고리즘이라는 것, 그것은 평범한 것입니다. (POSIX) 버전 sed을 지원합니다. 가 출력

XX /* comment1 */ YY /* comment2 */ ZZ 

:

XX comment1 */ YY /* comment2 ZZ 

고전 sed으로 시도 가치가 될 것은 불가능에 충분히 가까운 것을 해결이 있음을 의미한다. sed에 PCRE (Perl 호환 정규 표현식) 지원이있는 경우 비 탐욕적인 일치 연산자를 사용하여이를 두 개의 주석으로 처리 할 수 ​​있습니다.

+0

고마워요. 조나단. 그것은 사용하기에 충분히 강건한 것보다 더 많은 학습을하기위한 것이 었습니다. 도움을 주셔서 감사합니다, 이것은 나를 괴롭혔다. – prelic

관련 문제