![](/img/trans.png)
[英]To add a string before and after, if the specific string is matched between patterns using sed in bash
[英]fIm trying to find a string betwen two match patterns and then add that string before a pattern using sed
假设我在名为“logs_test”的文件中有以下行:
样本输入:
"at 10947 usecs after Tue Feb 23 18:29:46 2021 [119] init: Event=populatedonRestart"
我想在“at”和“usecs”之间找到一个字符串,并在上一行的“2021”之前添加字符串
样品 output:
"at 10947 usecs after Tue Feb 23 18:29:46 10947 2021 [119] init: Event=populatedonRestart"
sed 命令查找两个匹配模式之间的字符串:
sed "s/at//;s/usecs.*//“ <file_name>
sed 命令在模式前添加字符串:
sed 's/2021/string &/g' <file_name>
如何使用一个 sed 命令完成两项任务? 是否要在 sed 中使用 sed 命令来执行此操作?
这将为您的示例执行此操作(使用 GNU sed):
sed 's/^\(at \)\(.* \)\(usecs.*\)\(2021.*\)/\1\2\3\2\4/' your_file
它的工作方式如下:
\(
和\)
之间的东西(这些被称为捕获组)/\1\2\3\2\4/
一旦你确认它做了你想要的,你可以添加-i
来进行就地替换:
sed -i 's/^\(at \)\(.* \)\(usecs.*\)\(2021.*\)/\1\2\3\2\4/' your_file
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.