2014-11-20 2 views
0

안녕하세요 저는은 grep 문정규 표현식

을 시도

1+1+1+1+1+1=6 

이 문에서 = 기호 전에 마지막 '1 + 1'을 검색 할 아주 간단한 질문이 있습니다 가 + 기호를 모두 강조로

`grep '.+' 'text.txt'` 

1+1+1+1+1+ 

를 반환합니다. 나는 다음과 같은 최소 범위를 만들어야한다고 믿는다 : grep '.+{4,}' 'text.txt' 이것은 작동하지 않는다. 설명이있는 해결책이 인정 될 것입니다.

감사

+0

이 문자열을 발견하면 전체 라인을 반환 grep을하지 않습니다? – sln

답변

1

tail -1에 마지막 + 당신이 grep -o 사용할 수 -expression 및 파이프 얻으려면 : 리터럴 + 기호 다음에

grep -o '[0-9]+[0-9]' <<< '1+1+1+1+2+1=6' | tail -1 

이 정규식 [0-9] (0과 9 사이) 번호와 일치를, 그 다음에 번호가 다시 나타납니다. 이는 표현식 문자열의 둘 이상의 부분과 일치합니다. -o 옵션은 각 일치 항목을 별도의 줄에 인쇄하고 tail은이 줄 중 마지막 항목을 선택합니다.

당신이 파일 text.txt의 표현이있는 경우, 그냥 사용

grep -o '[0-9]+[0-9]' text.txt | tail -1 
+0

고마워,이 작품을하지만 난 정말 어떻게 이해가 안 돼요. 왜 0-9 + 0-9입니까? 편집 - 나는 당신이 그것을 설명하기 위해 당신의 코멘트를 편집 한 것을 본다. 건배! – user3423572

+0

@ user3423572 설명을 추가하겠습니다. –

1

+는 "1 또는 이전 경기보다"를 의미 메타 문자입니다. .+라고 말하면 "어떤 캐릭터, 그리고 나서 1 캐릭터 이상의 캐릭터"라고 말하고있는 것입니다.

리터럴 메타 문자를 검색하려면 백 슬래시로 이스케이프 처리해야합니다.

grep '.\+' text.txt 
+1

이것은 사용하는 시스템과 grep-family에 따라 다를 수 있습니다. -'+'는 기본 정규 표현식의 _normal_ 문자입니다. _unless_ 메타 문자가되기 위해 이스케이프됩니다. 'grep' =='grep -G''a + 'finds 리터럴'a +'하지만 grep 'a \ +'는 시퀀스에서 하나 이상의 'a'를 찾습니다; grep -E 'a +'는 이미 메타 문자이므로 grep -E 'a +'는 하나 이상의 'a'를 찾았지만 grep -E'a \ + '는 이스케이프 리눅스에서 man 1 grep을위한 온라인 페이지는 똑같다고 나에게 알린다. 그러나 나는 OS X에서 "** BSD ** General Commands"에 대한'man 1 grep'을 기반으로 문자'a +'와 문자' 테스트하지 않았다. –