sed -e 's/\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\.)\(.*\)/ANONYMOUS\2/p' $IPLOG
我正在尝试将 ip addr 从 $IPLOG 替换为 ANONYMOUS,但出现此错误
sed: -e expression #1, char 57: Unmatched ( or \(
答案1
您在其中一个 s 之前缺少一个反斜杠)
。您可能的意思是g
(全局替换;每次出现)而不是p
(如果替换成功则打印,这将导致替换的行被打印两次)。并且\{1,\}
(或\+
某些实现)而不是*
(一个或多个代替零个或多个):
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
(或者-r
像ssed
GNU 或更旧版本中的那样sed
)具有扩展正则表达式,可以使其更易读:
sed -E 's/([0-9]+\.){3}[0-9]+/ANONYMOUS/g' < "$IPLOG"