簡體   English   中英

sed - 在匹配后 X 行后插入行

[英]sed - insert line after X lines after match

我有以下內容:

void function_1()
{
    //something (taking only 1 line)
}
->INSERT LINE HERE<-
//more code

使用 sed,我想在 INSERT LINE HERE 標簽處插入行。 最簡單的方法應該是:

  1. 查找文本“function_1”
  2. 跳過 3 行
  3. 插入新行

但是沒有一個已知的 sed 選項可以完成這項工作。

sed '/function_1/,3a new_text

在“function_1”之后立即插入 new_text

sed '/function_1/,+3a new_text

在接下來的 3 行中的每一行之后插入 new_text,在 'function_1' 之后

sed '/function_1/N;N;N; a new_text

在多個位置插入 new_text,與模式無關

謝謝。

用 GNU sed 試試這個:

sed "/function_1/{N;N;N;a new_text
}" filename
sed '/function_1(/,/^[[:space:]]*}/ {
 ,/^[[:space:]]*}/ a\
Line that\
you want to\
insert (append) here
   }' YourFile
  • 插入后的行} (獨自一人在符合最終一些前空間)從開始與部分function_1(
  • 我假設您的內部代碼中沒有單獨的}就像您的示例

小心根據函數名稱進行選擇,因為它可以(通常是)用作其他代碼部分中對函數本身的調用,因此/^void function_1()$/可能更好

使用 awk:

awk '1;/function_1/{c=4}c&&!--c{print "new text"}' file
  • 1{print}的簡寫,所以文件中的所有行都被打印出來
  • 當模式匹配時,將c設置為 4
  • c達到 1(所以c為真且!--c為真)時,插入該行

你可以只使用!--c ,但增加了對檢查c是和手段,真正的c不會繼續下降超過0。

不計算,匹配:

sed -e '/^void function_1()/,/^}$/ { /^}$/a\
TEXT TO INSERT
}' input

這會查看聲明和右大括號之間的塊,然后在右大括號之后附加 TEXT_TO_INSERT。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM