grep에 공백 문자를 포함시키는 방법은 무엇입니까?


17

example이라는 파일이 있습니다

$ cat example

kali.pdf
linux.pdf
ubuntu.pdf
example.pdf.
this.pdf
grep .pdf

그리고 grep전에 공백이있는 줄을 얻는 데 사용할 때 얻을 .pdf수없는 것 같습니다.

grep *.pdf example

아무것도 반환하지 않습니다 ( "그 리핑하고 앞에 0 개 이상의 공백을 일치 시키려고 .pdf하지만 결과는 없습니다")

그리고 내가 사용하면 :

grep i*.pdf example

kali.pdf
linux.pdf
ubuntu.pdf
example.pdf.
this.pdf
grep .pdf

모든 줄이 돌아옵니다. 왜냐하면 "grep, 나에게 i1 번 또는 0 번 일치 해 ."

그리고 마지막으로 :

grep " *.pdf" example

결과가 반환되지 않습니다

이 샘플에서는보고 싶습니다

grep .pdf 

출력으로

내 생각에 어떤 문제가 있습니까?

답변:


31

당신이 당신의 표현을 인용해야합니다. 나는 쉘 단어 쪼개기가 여기의 문제 중 하나라고 생각하지만, 모든 종류의 것들이 그렇지 않으면 잘못 될 수 있기 때문에 항상 정규 표현식을 인용해야합니다.

$ grep ' \.pdf' example
grep .pdf

또는 공백이 여러 개인 *경우 (앞 공백이없는 경우와 일치하므로 사용할 수 없음 )

grep ' \+\.pdf' example

+"이전 문자 중 하나 이상"을 의미합니다. BRE에서는 \이 특수 기능을 사용 하기 위해 이스케이프 처리해야 하지만이를 피하기 위해 ERE를 대신 사용할 수 있습니다.

grep -E ' +\.pdf' example 

공백을 의미하기 위해 사용할 수도 있습니다 \s.grep

grep '\s\+\.pdf' example

.정규 표현식 .에서 문자 클래스에 있지 않는 한 문자를 의미 하기 때문에 리터럴을 이스케이프 처리해야합니다 .


당신은 마지막 줄에 공간이 있음을 알게 된 첫 번째 사람이었습니다.
Pilot6

@ Pilot6 감사합니다. 질문은 약간 혼란스럽게 작성되었습니다 :)
Zanna

질문을 이해 한 첫 번째 사람에게는 약간의 배지가 있어야합니다. ;-)
Pilot6

@ 잔나,이 경우 언제든지 egrep가 갈 잘못이 있습니까? egrep는 항상 당신에게 유리합니다 ...
solfish

@solfish는 egrep(AFAIK, 정규식 스타일의 측면에서)과 동일 grep -E, 나는 믿는다 우리는 후자를 사용하기위한 것입니다 - egrep가정의 찬성되지 않습니다 등 grep의 플래그
ZANNA
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.