![](/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.