簡體   English   中英

sed-替換多行(一整段文字)

[英]sed - replace multiple lines (a whole block of text)

我正在處理以下文本:

... other stuff here..

options { chain_hostnames(off); flush_lines(0); use_dns(no); use_fqdn(no);
          owner("root"); group("log"); perm(0640); stats_freq(0);
          bad_hostname("^gconfd$");
};

... other stuff here..

我需要使用sed來添加log_fifo_size(30000); 作為使我的文字看起來像這樣的新行:

... other stuff here..

options { chain_hostnames(off); flush_lines(0); use_dns(no); use_fqdn(no);
          owner("root"); group("log"); perm(0640); stats_freq(0);
          bad_hostname("^gconfd$");
          log_fifo_size(30000);
};

... other stuff here..

我了解如何進行正則表達式工作,只是沒有足夠的信心去使用它。 因此,非常感謝任何語法解釋或任何幫助!

我嘗試了以下方法:

$sed -e 's/options.*/TEST/g' syslog.conf
$sed -e '/options.*/ {N; s//TEST/g}' syslog.conf

兩者使我離得很近,但距離還不夠。

sed -e '/options.*/ {N;N; s//options {/g}' syslog.conf

這是我得到的最接近的東西。 但是由於我不知道 options {}之間的行數 ,所以有點棘手。

我遵循了無數的指南,但是通過文檔學習總是很艱難。 我喜歡一個很好的例子,所以我想我想問的是我是否可以從我的情況中創建一個例子來幫助我學習基礎知識,然后再學習regex / sed的基礎知識。

從您的示例中,您正在插入一行,您可以使用i

sed '/};/i\          log_fifo_size(30000);' 
sed '/options {/,/};/ {
   s/};/log_fifo_size(30000);\
&/
   }' YourFile

以從options {};開始的部分}; 換行}; 使用log_fifo_size(30000);\\n};

它沒有使日志與本節的其余部分對齊...但是可以用更多的代碼來完成

假設該部分以}; 並且沒有}; 本節內容中的ar

這可能對您有用(GNU sed):

sed '/^options/,/^};/{/};/{x;s/\S.*/log_fifo_size(30000);/;x;H;g};h}' file

這適用於文件的options部分。 將每行復制到保留空間中,當它占用最后一行時,用所需的字符串替換前一行副本中除前空格以外的所有空格。 然后追加最后一行並一起打印出兩行。

暫無
暫無

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

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