2014-11-05 3 views
1

전체 줄을 삭제하지 않고 txt 파일의 두 문자열 (/**/) 사이의 텍스트를 제거하려고 시도했습니다.유닉스에서 두 단어 사이의 문자열 제거

내가 다음이 포함 된 파일이 있다고 가정하자 :

/* reports */ 
%report1([email protected] /*[email protected] */,lag=3); 
%report2([email protected] /*[email protected] 
[email protected] */ ,lag=3); 

내 원하는 출력 내가 tr, sedawk의 다양한 조합을 시도

%report1([email protected], lag=3); 
%report2([email protected] 
,lag=3); 

것,하지만 여전히 작동하지 . 의견이 있으십니까? 보고서 2는 별개의 행에 구분 기호 /**/이있는 두 개의 다른 행에 있습니다. 함께

+0

당신이 '%의 report2' 뒤에 3'to = 마지막'지연을 하시겠습니까? – Jotne

답변

1

:

perl -0777pe '[email protected]/\*.*?\*/@@gs' file.txt 
+1

그게 정확히 작동했습니다 .... 고마워요. –

+0

환영합니다 =) –

+1

@putnick 너무 추하지만 너무 예뻐요! –

0
awk 'BEGIN { RS="/"; ORS="" }\ 
    /^\*/,/\*$/ { f=1; next }\ 
    { if (f!=0) f=0; else print "/"; print }' file.txt 

BEGIN { RS="/"; ORS="" }"/"에 기록 구분자 설정 설명 및 빈 문자열로 출력 레코드 세퍼레이터.

/^\*/,/\*$/ { f=1; next }

인쇄 항상 플래그 f는 그 다음 설정 해제 설정되어있는 경우 1.

{ if (f!=0) f=0; else print "/"; print }에 플래그 f을 설정하는 동안, 그렇지 않으면, *로 시작 하나, 그리고 *로 끝나는 일 사이의 모든 레코드를 건너 /를 인쇄 그 기록.

은 문자열에 /* 또는 */의 대소 문자를 처리하지 않습니다. 멀티 문자의 RS에 대한

관련 문제