簡體   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