2014-11-03 3 views
0

나는 간단하다고 상상할 수있는 문제가 있지만 지난 시간 동안 모든 것을 시험해 보았다.단어 뒤에 공백이 있고, 뒤에 BASH의 세 숫자가 나온다

grep에서 3 개의 숫자 뒤에 공백이 오는 문자열을 찾으려고합니다.

egrep hello\s\d{3} 

나는 또한 시도 오래된 스타일 : 나는 독립적으로 행의 안녕과 GREP 또는 숫자를 사용하는 경우가 잘 작동하지만,

grep hello[:blank:][0-9][0-9][0-9] 

즉시 빈과 결합하려고으로 또는 공백이 있으면 grep은 아무 것도 반환하지 않습니다.

+0

BTW, 이건 정말 bash는 * 일치하지 않는 것은 * : 배쉬는 내장 정규식 평가가 있습니다. bash에서 네이티브 솔루션을 원한다면, 그것은 [[$ string = ~ $ regex]]와'BASH_REMATCH'를 사용할 것입니다. –

답변

3

(또는 네, 당신은 따옴표를 계산하는 경우) :

grep 'hello[[:blank:]][0-9][0-9][0-9]' 

하면 (파일 또는 스트림에 반대) 변수가 일치하는지 여부를 결정하는 경우에 반면에 grep은 올바른 도구가 아닙니다. 그것은 상관없이 당신이 무엇을 사용 쉘 동일하게 동작하지 않도록 그렙 외부 명령입니다 -

str='hello 123' 
re='^hello[[:blank:]][0-9]{3}$' 
if [[ $str =~ $re ]]; then 
    echo "Match!" 
fi 
+0

정말 고마워, 나는 그걸 알아 내려고 너무 많은 시간을 보냈다. – user2793442

+0

@AvinashRaj, 솔직히 모르겠습니다. 나는 좀 더 종합적으로 대답하려고 노력했지만, 좋은 8 초의 리드를 가졌습니다. –

1

문자 클래스에 [:blank:]을 입력해야합니다.

$ grep 'hello[[:blank:]][0-9][0-9][0-9]' file 
hello 123 

또는

$ grep 'hello[[:blank:]][0-9]\{3\}' file 
hello 123 

[0-9]\{3\} 세 이상의 숫자를 일치합니다.

어떻게 나는 그 정보를 알고 있습니까? 두 개의 문자로 오프

$ grep hello[:blank:][0-9][0-9][0-9] file 
grep: character class syntax is [[:space:]], not [:space:] 
+0

감사합니다. 공백을 알지 못 했으므로 대괄호가 2 개 필요합니다. – user2793442

+0

BTW, 여기에 따옴표를 추가하는 것이 좋습니다. 그렇지 않으면'grep'이 호출되기 전에 인수가 표현식과 일치하는 파일 이름으로 대체되거나'nullglob' 옵션이 활성화 된 경우 쉘에 의해 삭제 될 수 있습니다. –

+0

@ user2793442 grep 자체가 다음과 같이 가르칩니다 .-) –

관련 문제