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진수입니다.d
671d
다음을 추가해야 합니다.
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진수도 처리해야 하는 경우 괄호 안에 사용하세요.