用 sed 替换 IP 地址会产生: sed: -e expression #1, char 57: Unmatched ( 或 \(

用 sed 替换 IP 地址会产生: sed: -e expression #1, char 57: Unmatched ( 或 \(
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(或者-rssedGNU 或更旧版本中的那样sed)具有扩展正则表达式,可以使其更易读:

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

相关内容