regex - 带有可选小数和反向引用的 sed 数字
问题描述
我有这样的简单输入:
11111(n)
222222(p)
33333333(:)
我可以使用 sed 反向引用将括号与这样的数字交换:
sed -e 's/\([[:digit:]]*\)\((.*)\)/\2 \1/' file
产生
(n) 11111
(p) 222222
(:) 33333333
这个很酷 !
但是对于潜在的十进制数字,事情变得更加困难,就像这样
11111(n)
11111.111(n)
2222222.22(p)
33.3333333(:)
我尝试了很多命令,比如
sed -e 's/\([[:digit:]]*(\.[[:digit:]]*?)\)\((.*)\)/\2 \1/' file
sed -e 's/\([[:digit:]]*\.?[[:digit:]]*?)\)\((.*)\)/\2 \1/' file
sed -e 's/\([[:digit:]]*\.*[[:digit:]]*)\)\((.*)\)/\2 \1/' file
sed -e 's/\([[:digit:]]*.*[[:digit:]]*)\)\((.*)\)/\2 \1/' file
所需的输出:
(n) 11111
(n) 11111.111
(p) 2222222.22
(:) 33.3333333
请注意,数字可以是任意长度(1 到 n 位),小数点 (.) 和小数位是可选的。
此外,sed
似乎没有\d
速记,正如stackexchange中所指出的那样
解决方案
你可以使用这个sed
:
sed -E 's/^([.[:digit:]]+)(\([^)]*\))/\2 \1/g' file
(n) 11111
(n) 11111.111
(p) 2222222.22
(:) 33.3333333
这里[.[:digit:]]+
将匹配任何数字或点字符的 1+。
推荐阅读
- javascript - Nuxt.js button that performs fetch() and outputs to a variable in the template
- php - Nginx - Laravel - LEMP - 访问除 / 以外的任何页面时出现 403 Forbidden 错误
- javascript - 如何将整个图像传递给下一个 JS 中的 api 路由,以便我可以用 FS 编写它并用 cloudinary 发送
- javascript - 将最大值存储在变量中的惯用方式?
- kotlin - Kotlin 中的任何泛型
- javascript - 为什么本地存储保存未定义?
- java - 尽管指定了文件扩展名,但上传到 Cloud Storage 的文件类型不正确
- java - jaxb 绑定 name 属性的自定义值
- javascript - Reactjs 不渲染本地图像
- go - 在 hugo 中按类别列出所有页面