해결책:

해결책:

GNU 문서에 따르면:

‘\<’ Match the empty string at the beginning of word.
‘\>’ Match the empty string at the end of word.

내 /etc/fstab은 다음과 같습니다:

/dev/sdb1       /media/fresh      ext2   defaults     0 0

나는 grep이 /media/fresh의 존재에 대해 TRUE/FALSE를 반환하길 원합니다. \<을 사용해 보았지만 \>성공하지 못했습니다. 왜?

egrep '\</media/fresh\>' /etc/fstab

해결책:

egrep '[[:blank:]]/media/fresh[[:blank:]]' /etc/fstab

그런데 더 못생겼어요.

내 grep은 2.5.1입니다.

답변1

\<\>단어의 시작과 끝에서 각각 빈 문자열과 일치하며, 단어 구성 문자는 다음과 같습니다 .

[[:alnum:]_]

에서 man grep:

Word-constituent characters are letters, digits, and the underscore.

따라서 /올바른 단어 형성 문자가 아니기 때문에 정규 표현식이 실패합니다.

대신, 단어 주위에 공백이 있을 때 단어를 일치시키는 -w옵션을 사용할 수 있습니다.grep

grep -wo '/media/fresh' /etc/fstab

예:

$ grep -wo '/media/fresh' <<< '/dev/sdb1       /media/fresh      ext2   defaults     0 0'
/media/fresh

답변2

\<(and)에 대한 이 질문은 \b에만 적용되는 것이 아니라 /단어가 아닌 모든 문자에도 적용됩니다. (즉, [[:alnum:]]및 이외의 문자 입니다 _.)

문제는 정규식 엔진이 /다음 앵커를 검색할 때 처럼 항상 단어가 아닌 문자를 우회한다는 것입니다 \<. 그렇기 때문에 /그 뒤에 단어가 아닌 문자를 넣으면 안 됩니다 \<. 이렇게 하면 구성상 아무것도 일치하지 않습니다.

grep 옵션의 대안 -w은 다음과 같습니다.

egrep "(^|\W)/media/fresh($|\W)"

관련 정보