"#"또는 ";"로 시작하지 않는 줄을 잡는 방법?


78

grep smb.conf하고 주석이없는 줄 만보 고 싶습니다 .


1
testparm이 기본값을 표시 하므로이 작업을 더 잘 수행하십시오.
F. Hauri

@ F.Hauri 감사합니다. 그것은 또한 작동하고 있습니다. 그러나 불필요한 (내 경우)도 grepped한다 정보, ... 생산도
데니스


PCRE grep을 통한 또 다른 방법 stackoverflow.com/a/45917459/3297613
Avinash Raj

답변:


125
grep "^[^#;]" smb.conf

첫 번째 ^는 줄의 시작을 나타내므로 첫 번째 문자 다음에 시작되는 주석이있는 줄은 제외되지 않습니다. 또는 [^#;]아닌 문자를 의미합니다 .#;

즉, #및 이외의 다른 문자로 시작하는 행을보고합니다 ;. 줄 도 제외한다는 점에서 시작하지 않는 ( #;사용하는 grep -v '^[#;]') 줄을보고하는 것과 같지 않지만이 경우 빈 줄이 신경 쓰이는 것을 의심하므로 바람직합니다.

선행 공백 문자를 무시하려면 다음과 같이 변경할 수 있습니다.

grep '^[[:blank:]]*[^[:blank:]#;]' smb.conf

또는

grep -vxE '[[:blank:]]*([#;].*)?' smb.conf

또는

awk '$1 ~ /^[^;#]/' smb.conf

정답은 : cat /etc/samba/smb.conf | grep ^[^#\;]그러나 어쨌든 감사
데니스

네, 아니면 "따옴표"를 사용할 수도 있습니다. 나는 그것을 나중에 편집했습니다.
goldilocks

7
@denys 당신이 틀렸다 : goldilocks의 응답은 당신보다 나쁘지 않다. .1 cat ...| 구문을 사용하지 마십시오 !. .2 빈 줄과 공백 만 포함하는 줄을 휘감기 위해 주석이있는 U는 다음을 사용할 수 있습니다.grep -v "^ *\(#.*\|\)$" < smb.conf
F. Hauri

7
@EmanuelBerg 쓸모없는 포크입니다. cat file | grep "blah"implie은 통해 두 개의 바이너리를 실행 FIFO 동안, grep "blah" <file정확히 같은 수행과 결합 file naturaly 그렙의에 STDIN. [bash] 쓸모없는 고양이 는 모든 검색 엔진을 통해 모든 기능을 갖춘 검색 주제입니다! -> blog.sanctum.geek.nz/useless-use-of-cat ... 샘플 용
F. Hauri

2
정확히 동일 하지 않습니다 . 2 개의 프로세스와 1 개의 프로세스로 충분한 파이프를 만듭니다. @ F.Hauri의 마지막 주석에 제공된 링크를 읽으십시오.
rahmu

4

Vim 솔루션 :

:v/^\s*[#\n]/p

vim 솔루션을 스스로 찾으려고 할 때이 질문을 우연히 발견했습니다.


1
공백으로 시작하는 줄도 삭제됩니다.
Kusalananda

참된. 주석 사이의 줄로 구성 파일에 유용하다는 것을 알았습니다. 빈 줄을 유지하려면 다음 *+같이 변경하십시오 .v/^\s+[#\n]/p
David Lord

3

oliver nadj의 답변에서 grep 할 파이프는 (GNU grep또는 호환 가능 하다고 가정) 제거 할 수 있습니다 .

grep -v "^\s*[#\;]\|^\s*$" <some_conf_file>

두 번째 grep i @ nadj는 쓸모없는 것 같습니다. @goldilocks의 답변은 eough 이상이었습니다.
Archemar

1
goldilocks의 답변이 정확하다는 데 동의합니다. 그러나 빈 줄을 표시하지 않는 것이 유용하다고 생각했습니다.
Morten Lind

2
grep -v "^\s*[#;]" any.conf | grep -v "^\s*$"

그것이 저에게 효과적입니다. 해시 마크 또는 세미콜론 앞의 공백조차도 주석 처리되었거나 빈 줄은 무시하십시오.


2

이 예제는 사람들에게 유용 할 수 있습니다.

[user@host tmp]$ cat whitespacetest
# Line 1 is a comment with hash symbol as first char

# Line 2 is a comment with hash symbol as second char
  # Line 3 is a comment with hash symbol as third char
        # Line 4 is a comment with tab first, then hash
        ; Line 5 is a comment with tab first, then semicolon. Comment char is ;
; Line 6 is a comment with semicolon symbol as first char
[user@host tmp]$

첫 번째 grep 예제는 공백으로 시작하고 그 뒤에 해시 기호가 오는 행을 제외합니다.

[user@host tmp]$ grep -v '^[[:space:]]*#' whitespacetest

        ; Line 5 is a comment with tab first, then semicolon. Comment char is ;
; Line 6 is a comment with semicolon symbol as first char
[user@host tmp]$

두 번째는 공백으로 시작하고 해시 기호 또는 세미콜론으로 시작하는 행은 제외합니다.

[user@host tmp]$ grep -v '^[[:space:]]*[#;]' whitespacetest

[user@host tmp]$

0

여기에 더 나은 것이 있습니다 (GNU grep또는 호환 가능 하다고 가정 ).

grep -v '^[#;/%<]\|^\s*$' anyfile.conf

#;/%<꺾쇠 괄호 안에있는 줄로 시작하고 파이프 뒤의 두 번째 필터는 \s*$빈 줄입니다.


2
주석에 어떤 유형의 conf 파일이 사용 <되거나 /사용됩니까? <주석 이외의 모든 conf 파일 형식을 알고 있습니다 . !X 리소스 파일 에서처럼 사용되기도합니다.
Stéphane Chazelas



-3

다음으로 시작하는 줄이없는 파일이 표시됩니다 #. grep -v "^#" filename


이것으로 시작하는 줄에는 아무것도하지 않습니다 ;.
Kusalananda
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.