sed, 파일 [중복]의 모든 댓글 삭제

sed, 파일 [중복]의 모든 댓글 삭제

다음과 같이 파일에서 주석을 제거하는 sed 명령이 있습니다.

sed -i /^#/d /path/to/file

이것은 작동하지만 주석이 공백으로 들여쓰기/앞에 오는 경우에는 작동하지 않습니다.

좋다

#this is a good comment           ---- works
    #this is an indented comment  ---- doesn't work

첫 번째로 보이는 문자로 #이 포함된 줄을 제거하려면 어떻게 변경해야 합니까?

답변1

선행 공백을 허용하도록 정규식을 수정하세요.

sed -e '/^[ \t]*#/d'

이 정규 표현식은 0개 이상의 공백이나 탭(순서 상관 없음)으로 시작하고 그 뒤에 파운드 기호가 오는 줄과 일치합니다.

GNU sed는 기호 이름도 지원합니다:

sed -e '/^[[:space:]]*/d'

여기에는 흥미로운 유니코드 외국어 문자를 포함한 모든 공백 문자가 포함됩니다. 그러나 이것은 이식성이 떨어집니다.

답변2

노력하다

sed -i -e '/^[ \t]*#/d' /path/to/file

\t를 리터럴 탭 문자로 바꿔야 할 수도 있습니다.

답변3

넌 할 수있어:

sed '/^[[:blank:]]*#/d' file.txt

사용 grep:

grep -v '^[[:blank:]]*#' file.txt

답변4

사용:

sed '/^\s*#/d'

설명하다:

^ beginning of line
\s* arbitrary amount of whitespace (or none)

관련 정보