sed를 사용하여 텍스트 파일의 주석 줄 삭제

sed를 사용하여 텍스트 파일의 주석 줄 삭제

나는 sed초보자입니다. sed텍스트 파일의 주석 줄을 삭제하는 데 사용하고 싶습니다 .

내 텍스트 파일 시리즈에서 주석 줄은시작#기호 또는 @기호(즉, 원래 파일에 그리는 데 사용되었습니다 xmgrace). 다음과 같은 샘플 파일(이라고 함 sample.txt) 이 있다고 가정해 보겠습니다 .

# Comment 1
# Another comment
# Yet another comment
@ More comments
@ Still more comments
data1
data2

data3

sed다음을 얻기 위해 내부 수정을 사용하고 싶습니다 .sample.txt

data1
data2

data3

두 버전 모두 " " 와 " " data2사이에 빈 줄이 있습니다 .data3sample.txt

에서 영감을 받다이 스택 오버플로 질문, 나는 다음과 같은 일련의 (연속적인) 명령을 생각해 냈습니다.

sed -i 's/#.*$//' sample.txt
sed -i 's/@.*$//' sample.txt

다음 결과 파일이 얻어집니다.

    <blank line>
    <blank line>
    <blank line>
    <blank line>
    <blank line>
data1
data2

data3

<blank line>빈 줄만 있습니다 . (Stack Exchange가 출력 형식을 올바르게 지정하도록 이렇게 작성해야 했습니다.)

위의 문제는 주석 줄이 빈 줄로 바뀔 뿐 완전히 제거되지는 않는다는 것입니다.

(연속) 명령의 또 다른 가능성은 다음과 같습니다.

sed -i 's/#.*$//' sample.txt
sed -i 's/@.*$//' sample.txt
sed -i '/^$/d' sample.txt

나는 그것으로부터 다음과 같은 결과를 얻습니다.

data1
data2
data3

data2그러나 위의 내용도 " "와 " " 사이의 빈 줄이 data3유지되지 않기 때문에 잘못된 것입니다. (실수로 빈 줄을 무차별적으로 모두 제거했습니다.) 주석 줄을 제거하는 방법은 무엇입니까?

저는 우분투 리눅스를 사용하고 있습니다. 시간 내 주셔서 감사합니다!

답변1

사용sed 삭제 명령(이는 GNU가 sedUbuntu 및 기타 GNU 시스템에 있다고 가정합니다.)

 sed -i '/^[@#]/ d' sample.txt

선행 공백 문자를 고려해야 하는 경우:

sed -i '/^\s*[@#]/ d' sample.txt

답변2

grep '^[^@#]' < file.in > file.out

모든 문자로 시작하는 줄을 제공하지만 빈 줄뿐만 아니라 줄도 @효과적으로 #제거합니다 #foo.@foo

grep -v '^[@#]' < file.in > file.out

빈 줄은 유지됩니다. 이전에 공백이 있는 행을 고려하려면 다음을 수행하십시오 @.#

grep -v '^[[:blank:]]*[@#]' < file.in > file.out

빈 줄을 제거하십시오.

grep '^[[:blank:]]*[^[:blank:]@#]' < file.in > file.out

관련 정보