在 SED 命令中正确使用捕获组

读者罗德里克

我需要转换一个字符串 "1,234" =to=> 1234。这个字符串只是一个更大的行的一部分。文件中有数千行这样的行。

我写了一个 sed 命令,它没有按我预期的那样工作。

echo \"1,234\" | sed 's/\("\)\([0-9]+\)\(,\)\([0-9]+\)\("\)/\2\4/g'

据我了解,在这段代码中,

  • \1 是“
  • \2 是逗号前的数字
  • \3 是,
  • \4 是逗号后的数字

我希望这个命令输出 1234,它应该是 \2\4。但它只会返回“1,234”。所以我认为它没有被正确解析。一些帮助将不胜感激。

随机数

我建议您使用POSIX 扩展正则表达式(ERE),您不必转义括号和重复运算符。要在 中启用 ERE sed,您可以使用-E开关(或-r在 GNU 中sed)。您的表达式将如下所示:

$ echo '"1,234"' | sed -E 's/"([0-9]+),([0-9]+)"/\1\2/g'
1234

为完整起见,如果您转义 ,您的原始 BRE 表达式将正常运行+

echo \"1,234\" | sed 's/\("\)\([0-9]\+\)\(,\)\([0-9]\+\)\("\)/\2\4/g'
1234

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章