我想在数据末尾的每个负值前添加一个;
,如下所示:
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
来调用它?
谢谢!
答案 0 :(得分:4)
您可以使用
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