egrep 정규 표현식: [ 및 ] 또는 점이 일치하지 않는 문자 클래스

egrep 정규 표현식: [ 및 ] 또는 점이 일치하지 않는 문자 클래스

IPv6 주소를 대괄호로 일치시키려고 하는데 놀랍게도 막히네요...

일하다:

echo 'files ([2001:450:671d:200::121]:59464).' | egrep 'files \(.+\)\.$'

일치하지 않습니다(하지만 문자 클래스의 점이 유효하다고 생각합니다).

echo 'files ([2001:450:671d:200::121]:59464).' | egrep 'files \([.]+\)\.$'

다음과 같은 다른 시도

echo 'files ([2001:450:671d:200::121]:59464).' | egrep 'files \([][0-9:]+\)\.$'
echo 'files ([2001:450:671d:200::121]:59464).' | egrep 'files \([[]0-9:]+\)\.$'
echo 'files ([2001:450:671d:200::121]:59464).' | egrep 'files \([]0-9:[]+\)\.$'
echo 'files ([2001:450:671d:200::121]:59464).' | egrep 'files \([\[\]0-9:]+\)\.$'

작동하지 않습니다 ...

여기서 무슨 일이 일어나고 있나요?

답변1

첫 번째는 등과 \([.]+\)같은 텍스트 괄호 안의 텍스트 지점과 일치합니다 . (...)다른 것들은 위의 16진수와 일치하지 않습니다 . 9즉 , . 에 abcdef하나가 있습니다 . IPv6 주소는 16진수입니다.d671d

다음을 추가해야 합니다.

echo 'files ([2001:450:671d:200::121]:59464).' | egrep 'files \([][0-9a-f:]+\)\.$'

또는 더 엄밀히 말하면:

echo 'files ([2001:450:671d:200::121]:59464).' | egrep 'files \(\[[0-9a-f:]+\]:[0-9]+\)\.$'

또는 a-fA-F대문자 16진수도 처리해야 하는 경우 괄호 안에 사용하세요.

관련 정보