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