IP 주소를 sed로 대체하면 다음이 생성됩니다. sed: -e 표현식 #1, 문자 57: 일치하지 않음( 또는 \(

IP 주소를 sed로 대체하면 다음이 생성됩니다. sed: -e 표현식 #1, 문자 57: 일치하지 않음( 또는 \(
sed -e 's/\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\.)\(.*\)/ANONYMOUS\2/p' $IPLOG

$IPLOG에서 ANONYMOUS로 IP 주소를 바꾸려고 하는데 이 오류가 발생합니다.

sed: -e expression #1, char 57: Unmatched ( or \(

답변1

s 중 하나 앞에 백슬래시가 없습니다 ). 아마도 (대체에 성공하면 인쇄하여 대체된 행이 두 번 인쇄됩니다) g대신에 (전역 대체; 모든 발생)을 의미했을 것입니다 . p\{1,\}(또는 \+일부 구현) 대신 *(하나 이상바꾸다0 이상):

sed 's/[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}/ANONYMOUS/g' < "$IPLOG"

아니면 좀 더 세분화해 보세요.

sed 's/\([0-9]\{1,\}\.\)\{3\}[0-9]\{1,\}/ANONYMOUS/g' < "$IPLOG"

일부 sed구현 -E(또는 GNU 또는 이전 버전 -r과 같은 )에는 더 읽기 쉽게 만드는 확장 정규식이 있습니다.ssedsed

sed -E 's/([0-9]+\.){3}[0-9]+/ANONYMOUS/g' < "$IPLOG"

관련 정보