如何用单条sed命令提取两模式间字符串并插入到指定模式前
sed 单命令实现字符串提取并插入指定位置方案
不需要嵌套sed命令,直接使用sed自带的分组捕获功能即可一条命令完成需求,写法更简洁高效。
方法1:使用扩展正则(推荐,语法更易读)
适配支持-E参数的GNU sed环境,命令如下:
sed -E 's/at ([0-9]+) usecs(.*)2021/at \1 usecs\2\1 2021/g' logs_test
方法2:使用基础正则
如果当前环境不支持-E参数,可使用转义括号的基础正则写法:
sed 's/at \([0-9]\+\) usecs\(.*\)2021/at \1 usecs\2\1 2021/g' logs_test
命令逻辑说明
- 正则中第一个括号
([0-9]+)匹配at和usecs中间的数字串,捕获后存入内置变量\1 - 第二个括号
(.*)匹配usecs之后到2021之前的所有内容,捕获后存入内置变量\2 - 替换时按结构原样输出原有内容,额外在
2021前插入捕获到的\1即可
关于嵌套sed的补充:逻辑上可以通过GNU sed的e修饰符实现嵌套调用,但完全没有必要,嵌套会大幅增加命令复杂度、降低执行效率,优先使用原生的分组捕获功能即可。
内容的提问来源于stack exchange,提问作者Nalluri Venkatesh
相关产品推荐
相关产品推荐

