繁体   English   中英

fIm 试图在两个匹配模式之间找到一个字符串,然后使用 sed 在一个模式之前添加该字符串

[英]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

它的工作方式如下:

  • 我记得\(\)之间的东西(这些被称为捕获组)
  • 我将字符串分成 4 个捕获组,第二个捕获组是您关心的数字。 然后我将这些组重新组合在一起并使用第二个捕获组两次: /\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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM