2014-02-12 53 views
0

我有文本文件:file.confsed:如何在一行文本之後插入行?

### Option: LogFile 
#  Name of log file. 
#  If not set, syslog is used. 
# 
# Mandatory: no 
# Default: 
# LogFile= 

### Option: LogFileSize 
#  Maximum size of log file in MB. 
#  0 - disable automatic log rotation. 
# 
# Mandatory: no 
# Range: 0-1024 
# Default: 
# LogFileSize=1 

我曾嘗試:

sed --posix -e '/\bLogFile\b/{:a;n;/^ *$/!ba;i\LogFile=/tmp/log1.log' -e '}' file.conf 

,這是工作的罰款,對於那些選擇方框之後是一個空行。

問題是:在最後一個塊的末尾,如果沒有新行存在,那麼它不會插入行。這裏帶有文本LogFileSize。

如何處理此問題。

+1

AFAICS,那是因爲你告訴它不要通過圖形使用''後LogFile' \ B'和'LogFileSize'不匹配,因爲'Size'是單詞的一部分,而不是一個字的邊界。您可能還有問題,因爲當文件中沒有剩餘行時,'n'命令不能讀取另一行;我不確定它做了什麼,但它可以在插入操作發生之前終止命令序列。我不禁想到,如果您將腳本分散到多行,腳本會更易於閱讀。 –

+0

最後使用H添加一行;作爲你的sed腳本的開始,如果你可以用這個改變腳本的話。這不會使LogFileSize像J Leffler提到的那樣傳遞\ bLogFile \ b – NeronLeVelu

+0

也許您需要重申您的條件:*在空白行之前的一段代碼之後插入*,並且在最後一行代碼之後附加* *該文件的行不是空行。 – potong

回答

0
  1. 配襯之後添加:

    $ sed '/#.*LogFile=/a\LogFile=/tmp/log1.log' 1.cat 
    

    會做:

    # LogFile= 
    LogFile=/tmp/log1.log 
    
  2. 要第一空行前添加:

    $ sed '/^$/i\LogFile=/tmp/log1.log' 1.cat 
    

    會做什麼:

    # LogFileSize=1 
    LogFile=/tmp/log1.log 
    
+0

感謝您寶貴的答案。 :-) 我想做一個通用的腳本來更改配置文件。但是,不確定每個配置文件中都會出現_#option = _類似的文本。我的意圖是:如果有一些描述文本存在,我會在這些行後添加選項。 (我正在以其他方式處理價值替換或新增選項。) – donul

+0

@ndul已更新,但如果您不滿意,我會考慮)) –

相關問題