2017-10-02 3 views
-1

grep을 사용하는 데 상당히 익숙하며 적어도 "go"로 시작하는 두 단어를 포함하는 행을 찾고 싶습니다. 또한 단어가 끝났는지 확인하려면 공백, 마침표, 쉼표 또는 세미콜론을 따라야합니다.grep -Einvw "regexp"를 사용하여 특정 문자로 시작하는 단어가있는 행을 찾으십니까?

다음

내가 함께 온의 해결책이 같이이 내 기준과 일치하는 세 가지 결과를 반환하지만, 내가 네 가지 해결책이 있다는 것을 알고

grep -Ein " go[a-z]*[ .,;].* go[a-z]*[ .,;]" file.txt 

. 누구라도 조언을 해줄 수 있습니까?

+0

네 번째 (일치하지 않는) 행은 무엇입니까? – melpomene

+0

나는 그것이 무엇인지 모르겠다. 나는 네 가지 결과 만 있다는 것을 알고있다. – cpersonal

+0

네 가지 결과가 있음을 어떻게 알 수 있습니까? – melpomene

답변

0

Gnu grep support "word boundary"에 대해 \b을 사용하면 첫 번째 단어의 시작 부분에서이를 사용하고 싶을 것입니다. (현재 정규 표현식에서는 두 단어 앞에 공백이 있어야합니다.)

0

저음의 답변은 정확합니다.

\b[gG][oO]\w*\b.*\b[gG][oO]\w*\b 

을에 따라 :

\bgo\w*\b.*\bgo\w*\b 

당신이 그것을 대소 문자를 구분 ("GoPro의"또는 "목표"와 같은 단어를 일치)하려면 다음 여기에 이 가능한 솔루션입니다, 같은 라인을 감지하는 당신은 또한 같은 특별한 단어 문자와 일치 할 경우, 예상되는 단어는 "é"당신은 항상 추가 CAL :

\b[gG][oO][\wéÉ]*\b.*\b[gG][oO][\wéÉ]*\b 

주 : 경기 전체 라인을 반환하지 않습니다, 단지 테스트 그것은 경우 시합.

0

이 작업을 수행해야합니다

grep -Ein '\bgo.*\bgo' file.txt 

설명 : file.txt를 가진

\b : word boundary, makes sure we don't have any letter before 
go : literally "go" 
.* : 0 or more any character 
\b : word boundary, makes sure we don't have any letter before 
go : literally "go" 

가 :

goabc xyz go def 
goabc xyz defgo 
goabc xyz go def 

그것은 제공 :