regex - 在 Bash 中将 vim 替换为 sed / awk
问题描述
我想;
在数据末尾的每个负值之前添加一个,如下所示:
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
如何转换它以便我可以从命令行/ with 调用它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 位数字。
替换模式中的&
代表整个匹配值。
请参阅在线 sed 演示:
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
推荐阅读
- c - Pthread 编程简短示例
- c - Code::Blocks 在简单的 C 程序中无法识别双重标识符 (%lf)
- css - :root 中的 CSS 背景图像渐变
- java - 蜂巢模拟:一种蜜蜂的计数器返回异常高的数字
- java - 无法使用 jsonwebtoken 创建 RS256 jwt 密钥
- c# - UWP 中的动画形状
- sql-server - SQL:在多次出现的模式匹配后附加字符串
- arrays - RadListView 和 Observable Items - 设置项目值时应用程序崩溃
- c# - WinForms如何将值存储在字符串数组中(Properties.Settings.Default)
- sql - 访问:如何从表中检索某个字段并返回?