![인용하다](https://linux55.com/image/52094/%EC%9D%B8%EC%9A%A9%ED%95%98%EB%8B%A4.png)
맨 페이지에서 grep
나는 본다.
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.
그러나 나는 아직도 그 차이를 알 수 없다. 나에게는 \b
Perl의 단어 경계 표기법이지만 \<
Vim의 표기법도 같은 목적으로 사용됩니다.
추신: 영어는 제 모국어가 아닙니다. 차이가 분명해 보인다면 용서해주세요.
답변1
\<
단어의 시작 부분과 일치합니다.
\>
단어의 끝 부분과 일치합니다.
\b
두 경계 모두 일치합니다(끝 또는 시작에 있는 경우).
이러한 특수 문자의 중요한 점은 단어 경계 자체가 아닌 빈 문자열과 일치한다는 것입니다. 단어 경계는 Posix 표기법 (문자 a~Z, 숫자 및)으로 표시되는 문자 집합과 반대입니다 \w
. [_[:alnum:]]
_
예
마침내,Graeme은 매우 흥미로운 예를 발견했습니다.:
$ echo 'acegi z' | grep -o '[acegi ]*\>' | cat -A
acegi$
$ echo 'acegi z' | grep -o '[acegi ]*\b' | cat -A
acegi $
지금은 이 예에서는 단어 경계보다는 단어의 끝을 정확히 일치시키는 것이 유용한 경우가 있음을 보여줍니다. 단어의 끝을 일치시키면 일치하는 공백 문자를 사용하지 않아도 되기 때문입니다.
따라서 더 유용한 예를 들어 보겠습니다. 단어가 아닌 문자와 단어가 아닌 문자의 끝을 일치시키려는 경우에는 작동하지 않지만 \>
아마도 \b
이 특정 경우에는 작동할 것입니다. 다음 단어의 시작.
지금까지는 어떤 예도 생각할 수 없습니다. 하지만 내 생각에는 그것이 의미가 있는 몇 가지 사용 사례가 있을 수 있지만 내 생각에는 \b
모호하게 쓸 때와 같이 가독성 목적일 뿐이지만 시작이나 끝 부분에 단어를 정확하게 제공하면 일반 구문을 더 잘 이해할 수 있습니다. 읽는 사람의 표정.
답변2
제목에 있는 질문에 대답하시겠습니까?
\b
차이점은 무엇 입니까\<
?
거의 없음. 둘 다 일치경계, 단어와 비단어 사이의 전환.
오직인위적인차이점은 다음과 같습니다.
\b
경계 일치둘 다단어의 시작과 끝.- 유일하게
\<
일치하는 것은시작한 문장. - 유일하게
\>
일치하는 것은끝한 문장.
이것실제차이점은 다음과 같습니다.
$ echo ',,abc...' | grep -o '[abc.,]*'
,,abc... # match the whole string
$ echo ',,abc...' | grep -o '[abc.,]*\b'
,,abc # to the rightmost (due to *) word boundary.
$ echo ',,abc...' | grep -o '[abc.,]*\>'
,,abc # match to the same point (in this case).
$ echo ',,abc...' | grep -o '[abc.,]*\<'
,, # match to the rightmost **start** of a word.
공백에도 동일한 작업을 수행할 수 있습니다(공백을 표시하려면 cat을 추가하세요).
가장 오른쪽의 "단어 경계"까지(모든)(공백에 주의):
$ echo 'abcd abcd Z' | grep -o '[a-z ]*\b' | cat -A
abcd abcd $
가장 오른쪽의 "단어 시작"(같은 지점)까지:
$ echo 'abcd abcd Z' | grep -o '[a-z ]*\<' | cat -A
abcd abcd $
가장 오른쪽 "끝"까지(후행 공백 없음):
$ echo 'abcd abcd Z' | grep -o '[a-z ]*\>' | cat -A
abcd abcd$
또는 sed를 사용하세요.
네 단어 경계:
$ echo "abc %-= def." | sed 's/\b/ |>X<| /g'
|>X<| abc |>X<| %-= |>X<| def |>X<| .
두 단어의 시작:
$ echo "abc %-= def." | sed 's/\</ |>X<| /g'
|>X<| abc %-= |>X<| def.
그리고 단어의 두 가지 결말은 다음과 같습니다.
$ echo "abc %-= def." | sed 's/\>/ |>X<| /g'
abc |>X<| %-= def |>X<| .
인용하다
GNU sed의 정보:
'\b'는
단어 경계와 일치합니다. 즉, 왼쪽 문자가 "단어" 문자이고 오른쪽 문자가 "비단어" 문자인 경우 일치하며 그 반대의 경우도 마찬가지입니다.
$ echo "abc %-= def." | sed 's/\b/X/g' XabcX %-= XdefX.
시작
'<'는 단어의 시작과 일치합니다.
$ echo "abc %-= def." | sed 's/\</X/g' Xabc %-= Xdef.
끝
'>'는 단어의 끝과 일치합니다.
$ echo "abc %-= def." | sed 's/\>/X/g' abcX %-= defX.