如何使用 sed 替换 10 位数字序列

Rog*_*ngo 2 sed

使用 'sed' 我想用 1234567890 替换任何 10 位数字序列

这可以工作,但不是很优雅

echo "code=1111111111" | sed 's/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/1234567890/'
Run Code Online (Sandbox Code Playgroud)

这不起作用

echo "code=1111111111" | sed 's/[0-9]{10}/1234567890/'
Run Code Online (Sandbox Code Playgroud)

结果

code=1111111111
Run Code Online (Sandbox Code Playgroud)

谁能建议一个使用 'sed' 的简单优雅的解决方案?

Mar*_*uet 5

sed默认情况下使用基本正则表达式,这意味着{10}将被视为纯文本。

您可以验证这一点:

echo "code=1{10}" | sed 's/[0-9]{10}/1234567890/'
Run Code Online (Sandbox Code Playgroud)

将输出:

1234567890
Run Code Online (Sandbox Code Playgroud)

对于您的情况,您需要:

  • 使用该-E选项指定您要使用扩展正则表达式。
  • 逃脱{}像这样:\{10\}
echo "code=1111111111" | sed -E 's/[0-9]{10}/1234567890/'
echo "code=1111111111" | sed 's/[0-9]\{10\}/1234567890/'
Run Code Online (Sandbox Code Playgroud)