나는 이것에 대해 많은 연구를 해왔지만 아직도 모릅니다. 무엇인가요단어 경계의미는? 그것은 무엇을 합니까?
예를 들어, 누군가 나에게 이 명령을 설명해 줄 수 있나요?
egrep '\b[A-Z]+\b' filename.sh
답변1
상술 한 바와 같이여기, 예를 들어 다음과 일치합니다.~ 사이성격:
세 가지 다른 위치가 단어 경계 역할을 할 수 있습니다.
- 첫 번째 문자가 단어 문자인 경우 문자열의 첫 번째 문자 앞입니다.
- 문자열의 마지막 문자 뒤, 마지막 문자가 단어 문자인 경우.
- 문자열의 두 문자 사이. 그 중 하나는 단어 문자이고 다른 하나는 단어 문자가 아닙니다.
각 상황의 예는 다음과 같습니다.
문자열의 경우
foobar
첫 번째 사례가 일치합니다.foobar ^-----here
문자열의 경우
foobar
두 번째 사례가 일치합니다.foobar ^--here
문자열의 경우
foo bar
세 번째 사례가 일치합니다.foo bar ^--here, because space is not a word character
단어 문자의 자격은 특정 정규식 구현에 따라 다릅니다. 그러나 모든 경우에 문자( [a-z]
및 [A-Z]
), 숫자( [0-9]
) 및 _
은 단어 문자로 간주됩니다.
따라서 귀하가 게시한 예제 정규식( \b[A-Z]+\b
)은 두 단어 경계 사이에 있고 대문자만 포함하는 가장 긴 문자열을 찾기 위한 것입니다. 예를 들어 설명하는 것이 더 쉬울 수 있습니다.
echo "FOOBAR" | egrep '\b[A-Z]+\b' # Works
echo "FOO BAR" | egrep '\b[A-Z]+\b' # Works
echo "aFOOBARb" | egrep '\b[A-Z]+\b' # Does not work, we want capitals only
echo "12345" | egrep '\b[A-Za]+\b' # Does not work, no letters
echo "1FOOBAR2" | egrep '\b[A-Z]+\b' # Does not work, 1 and 2 are word chars
echo "_FOOBAR_" | egrep '\b[A-Z]+\b' # Does not work, _ is a word char
echo "#FOOBAR$" | egrep '\b[A-Z]+\b' # Works, # and $ are not word chars
답변2
egrep '\b[A-Z]+\b' filename.sh
그것을 분석해 봅시다:
[A-Z]
문자 클래스의 모든 문자를 나타냅니다[ABCDEFGHIJKLMNOPQRSTUVWXYZ]
.[A-Z]+
하나 이상의 대문자 발생을 나타냅니다. 일치 항목의 예는 다음 과 같습니다:A
,HELLO
,IS
, 등.I
ELEPHANT
'\bINDIA\b'
INDIA
: 대문자 단어에 대한 전체 단어 검색과 정확히 동일합니다. 그럴 것이다아니요성냥INDIANA
. 따라서 동일한 원칙이 적용됩니다.'\b[A-Z]+\b'
하나 이상의 대문자가 포함된 전체 단어가 검색됩니다.- 따라서
egrep '\b[A-Z]+\b' filename.sh
파일에서 하나 이상의 대문자 - 가 포함된 단어를 검색합니다filename.sh
.
\b
- 전체 단어 검색과 똑같습니다.