grep을 사용하여 파일에서 주석 제거

grep을 사용하여 파일에서 주석 제거

grep을 사용하여 파일(특히 smb.conf)에서 주석을 제거하려고 하는데 bash에서 오류가 발생합니다. 이 문제를 발견했습니다파일에서 모든 주석을 제거하는 방법은 무엇입니까?이는 grep에게 이 작업을 수행하는 구문을 제공하지만 파일을 덮어쓰지는 않고 터미널에 인쇄하기만 합니다. 효과적으로 파일을 덮어쓰고 싶습니다. 문제는 다음과 같습니다.

 $ sudo grep -o '^[^#]*' /etc/samba/smb.conf >> /etc/samba/smb.conf
-bash: /etc/samba/smb.conf: Permission denied

이전에도 비슷한 일을 해본 적이 있지만 온라인 가이드를 따랐고 grep을 수행하기 전에 bash를 시작해야 했던 기억이 막연하게 기억납니다. 분명히 더 이상 그 가이드를 찾을 수 없습니다.

grep을 사용하여 파일에서 주석을 제거하는 방법은 무엇입니까?

저는 Raspbian Jessie를 실행하는 Raspberry Pi B+를 개발 중입니다.

답변1

sed -i -e 's/#.*$//' -e '/^$/d' inputFile

모든 주석을 제거하는 것 외에도 빈 줄도 제거합니다. 나는 당신이 grep으로 요청했다는 것을 알고 있지만 이것을 제안할 것이라고 생각했습니다. 기능적으로는 빈 줄을 제거하고 파일 크기를 압축하면 동일하거나 더 좋습니다. 이것이 목표라고 생각합니다.

편집: 예, 다음 #으로 바꾸면 ;괜찮을 것입니다. 적어도 내 CentOS 6 시스템에서는 작동합니다. 유효하지 않은 문자 등에 대해 불평하는 경우 \앞에 문자를 넣는 것이 좋습니다 .;

답변2

sed는 파일을 "직접" 편집할 수 있게 해주는 옵션입니다(파일의 임시 복사본을 만들어서). 이 명령은 sed에게 -i/etc/samba/smb.conf를 내부에서 편집하고 -n기본적으로 행을 인쇄하지 않도록 지시합니다 .

sudo sed -i -n '/^[^#]/ p' /etc/samba/smb.conf

"p"는 grep 정규식과 일치하는 행을 인쇄한다고 알려줍니다. 불필요한 후행을 제거하기 위해 약간만 수정했습니다 *. 여기서 정규식은 "일치를 다음으로 나눈 값"을 의미합니다.옥토소프".

답변3

패턴은 구체적이어야 하며 선을 넘지 않아야 합니다.포함하다ㅏ '#':

sudo sed -r -i 's/^[[:space:]]*#.*$//' /etc/samba/smb.conf

질문은 실제로 빈 줄을 제거하도록 요구하지 않습니다. 이 명령은 빈 줄을 유지합니다(교체로 인한 빈 줄도 포함).

다른 솔루션과 마찬가지로 이는 -i비표준 옵션에 의존합니다(참조:POSIX) 및 -r(또한 비표준). 옵션 사용은 다음에 따라 다릅니다.플랫폼, 틀림없이.

관련 정보