2013-02-05 3 views
2

일부 파일을 훑어보고 'host'문자열을 찾습니다 (작은 따옴표 포함). 주석이없는 문자열이있는 파일을 캡처하려고합니다 (#).Grep의 결과가 일치하지 않습니다.

첫 번째 예제의 테스트 사례는 정상적으로 작동하지만 아래의 두 번째 사례는 제대로 작동하지 않습니다. 두 번째 경우는 내가 만든 테스트 파일이며 앞에 공백이 삽입되었습니다. 제어 문자가없고 공백 만 있다는 것을 알고 있습니다.

두 서버 모두 상당히 최신 버전의 Linux입니다.

두 번째 예가 텍스트를 캡처하지 않는 이유는 무엇입니까? 나는 단지 호스트 grep을 알고을 입력 한 다음 grep -v으로 필터링하지만,이 점을 이해하지 못한다. 다른 리눅스 서버에서

/home/user2> $ cat set.txt 
    'host' 
/home/user2> $ grep -E "^\s+'host'" set.txt 
    'host' 

그렙가 원하는 데이터 캡처하지 않습니다

[[email protected] ~]$ cat set.txt 
    'host' 
[[email protected] ~]$ grep -E "^\s+'host'" set.txt 
[[email protected] ~]$ 
+0

명령어가 다른 grep 형식으로 앨리어싱되어있을 수 있습니까? 그것을 확인할 수 있습니까? –

+0

좋은 질문입니다. 나는 "set"과 "env"를 실행했고 아무 것도 앨리어스로 보이지 않는다. – EdgeCase

+0

'grep -V'는 grep 명령에 대해 동일한 버전을보고합니까? –

답변

0

grep 버전 및 유형에 따라, \s이 작동하지 않을 수 있습니다. grep 2.12를 사용하는 시스템에는 \s에 대한 언급이 없지만 어쨌든 작동합니다. 다른 버전에서는이 기능을 사용할 수 없습니다. 남자 페이지에서

:

The Backslash Character and Special Expressions 
    The symbols \< and \> respectively match the empty string at the 
    beginning and end of a word. The symbol \b matches the empty string at 
    the edge of a word, and \B matches the empty string provided it's not 
    at the edge of a word. The symbol \w is a synonym for [_[:alnum:]] and 
    \W is a synonym for [^_[:alnum:]]. 

또한, man grep | grep "\\\\s" 반환 아무것도 전혀. 그게 다예요. \s에 대한 언급이 없습니다.

대신에, 당신은 너무 [:space:]을 사용할 수

[email protected] $ grep -E "^[[:space:]]+'host'" set.txt 
    'host' 

그래서 당신 그렙 버전을 확인하고, 그들 모두에서 작동 구문에 대한 이동합니다. This mailing list post\s이 grep 2.5.1에서 작동하지 않았지만 2.6.3에서 작동했기 때문에 2.6.3 이전 버전을 가지고 있기 때문에 \s과 함께 작동하지 않을 수 있습니다.

관련 문제