gpt4 book ai didi

regex - 在 Bash 中将 vim 替换为 sed/awk

转载 作者:行者123 更新时间:2023-11-29 09:45:27 25 4
gpt4 key购买 nike

我想在数据末尾的每个负值之前添加一个 ;,如下所示:

29.01.2019;29.01.2019;KIND;NAME;ITEM;ITEMNUMBER;ITEMORDER;;;;;;;;;;20,00;VAL
29.01.2019;29.01.2019;KIND;NAME;ITEM;ITEMNUMBER;ITEMORDER;012345678;012345678901;FW02ZZZ46847351235;;;;;;;-1,13;;VAL

我在 vim 中的试用:

:%s/-\d\{0,5}\,\d\{0,2}/;&\1/g

不幸的是,我不能用 sed 调用它:

sed -E 's/-\d\{0,5}\,\d\{0,2}/;&\1/g'

我收到错误信息:

sed: 1: "s/-\d\{0,5}\,\d\{0,2}/; ...": \1 not defined in the RE

如何转换它以便我可以从命令行/使用 sed 调用它?

谢谢!

最佳答案

你可以使用

sed -E 's/-\d{0,5}(,\d{1,2})?/;&/g'

详情

  • - - 连字符
  • \d{0,5} - 0 到 5 位数字-(,\d{1,2})? - 匹配 1 次或 0 次出现的可选捕获组
    • , - 逗号
    • \d{1,2} - 1 位或 2 位数字。

替换模式中的&代表整个匹配值。

查看 online sed demo :

s="29.01.2019;29.01.2019;KIND;NAME;ITEM;ITEMNUMBER;ITEMORDER;;;;;;;;;;20,00;VAL
29.01.2019;29.01.2019;KIND;NAME;ITEM;ITEMNUMBER;ITEMORDER;012345678;012345678901;FW02ZZZ46847351235;;;;;;;-1,13;;VAL"
sed -E 's/-\d{0,5}(,\d{1,2})?/;&/g' <<< "$s"

输出:

29.01.2019;29.01.2019;KIND;NAME;ITEM;ITEMNUMBER;ITEMORDER;;;;;;;;;;20,00;VAL
29.01.2019;29.01.2019;KIND;NAME;ITEM;ITEMNUMBER;ITEMORDER;012345678;012345678901;FW02ZZZ46847351235;;;;;;;;-1,13;;VAL

关于regex - 在 Bash 中将 vim 替换为 sed/awk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54891633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com