sed를 사용하여 하나의 주석을 제외한 주석 줄을 제거하십시오.

sed를 사용하여 하나의 주석을 제외한 주석 줄을 제거하십시오.

복잡한 사용법에 익숙하지 않지만 sed지금은 이것이 필요합니다. 내용이 다음 패턴을 따르는 1.txt 파일이 있습니다.

sree@amby01:/home/sree : cat 1.txt
SSL
 this first line
#comment line
 second line
# third comment
# line nline
#ApiText
lkjfl
# my line
your line
sree@amby01:/home/sree :

이제 블록 사이의 주석 줄을 제거하고 싶은데 SSL....#ApiText해당 줄을 삭제하면 안 됩니다.#ApiText

출력은 다음과 같아야 합니다.

SSL
this first line
 second line
#ApiText

bash 쉘입니다. 주석 줄을 개별적으로 제거하는 방법은 알고 있지만 주석 뒤에 텍스트가 나오지 않는 한 주석 줄을 제거하는 방법은 모르겠습니다. 나는 그것을 사용할 수 밖에 없습니다 sed.

답변1

여러 가지 방법이 있지만 그 중 하나는 다음과 같습니다.

sed '/SSL/,/#ApiText/{//b;/^#/d}' 1.txt
  • /SSL/,/#ApiText/- 명령이 실행될 주소 범위
  • //- 이전 정규식이 있는 줄( SSL또는 #ApiText- 발견된 줄)
  • b- 명령의 끝으로 이동합니다(의미아무것도하지 마세요)
  • /^#/d- 다음으로 시작하는 줄을 제거(인쇄하지 않음)#

관련 정보