당신의 치트 - 용지는 \d{4}
이 "네 자리"를 의미하는 유효한 정규식이라고 말할 수 있습니다. grep
이 파일에서 정규식을 검색한다고 말할 수 있습니다. 따로 따로 생각해 보면,이 두 문장 모두 사실입니다. 그러나 grep PATTERN FILE
은 한 종류의 정규 표현식 (POSIX "Basic Regular Expressions", BREs)을 기대하고 있기 때문에 매우 오도 된 것입니다. \d
과 {4}
은 다른 종류의 정규 표현식 ("Perl Compatible Regular Expressions ", PCREs, Perl 프로그래밍 언어 사용).
많은 버전의 grep
은 패턴이 BRE가 아닌 PCRE임을 나타 내기 위해 -P
플래그를 지원합니다. 그렇지 않으면 배쉬는 'd'
에 대한 속기의 일종으로 \d
을하기 때문에, 이러한 필요
가
grep -P '\d{4}' file.txt
(\d{4}
주위에 작은 따옴표를 참고, 그래서 grep
에 전달 된 실제 패턴은 d{4}
의미가 될 것입니다. 당신이 시도 할 수 있습니다 .. "네 d
의"대신 "네 자리 숫자"의 양자 택일로, 당신은 다른 방법으로 같은 문제를 해결 grep -P \\d{4} file.txt
을 쓸 수는)
편집 추가 할 : 죄송합니다. 질문 중 두 번째 부분 인 +
에 대해 설명하지 않았습니다. 따라서, 관련 사양, 1이에 따라 :
grep .+ file.txt
는 "NUL 이외의 모든 문자"를 의미하는 .
를 사용하고 +
는 "실제 더하기 기호"를 의미하는. 따라서 실제로는 처음이 아닌 더하기 기호가 포함 된 file.txt
의 줄을 인쇄해야합니다. 당신이 다른 행동을 보게된다면, 당신의 쉘 그리고/또는 grep
은 부적합해야합니다.
또한,이 (예 배시 등)에 부합 POSIX 쉘 +
를 작성하는 화장 방법으로서 \+
취급하므로
grep .\+ file.txt
는 상기와 동일하므로 grep
동일한 인수를 볼 이전과. (grep
는 .+
보다는 .\+
를 입력했는지 알 방법이 없습니다.)
마지막으로,이 :
합니다 (
\
실제로
grep
에 통과)
grep '.\+' file.txt
이 보증되지 동작을하십시오 grep
제공 구현은 .+
과 같은 의미로 사용하거나 \+
을 "하나 이상"(또는 다른 것)을 의미하는 특수 표기로 사용하거나 오류 메시지를 표시 할 수 있습니다. GNU 구현은 "하나 이상의"해석을 취하지 만, 다른 것은 다를 수 있습니다.
각주 : 즉 the grep
spec
- 및 the BRE and ERE spec합니다 (
grep
사양 링크를 말한다). 쉘이 grep
으로 전달되는 실제 인수를 결정하기 때문에 관련도 the shell spec입니다. grep
버전이 -P
을 지원하지 않는 발생하면
철자를 분명히 고맙습니다. 방금 배운 것 같아. –
고마워요! 내가 upvote 능력을 얻을 때, 나는 이걸로 돌아올거야. – Lenoxus
@Lenoxus : 천만에요! 그건 그렇고, upvote 능력에 상관없이, 질문자는 그가 가장 도움이되는 것으로 보이는 대답을 "받아 들일"수 있습니다. 왼쪽에있는 녹색 체크 박스 개요를 클릭하십시오. 질문에 대한 답변이 충분하다고 판단되면 다른 사람들이 질문이 해결되었음을 알 수 있도록 적절한 대답을 "수락"하는 것이 예의입니다. – ruakh