簡體   English   中英

用字符串替換一行或創建一個不存在的新字符串-sed

[英]Replace line by string or create new one if doesn't exist - sed

我想替換'DUMP ='行或如果某個塊中不存在則添加新行。 [text]到下一個[text]定義塊時,例如:

[name]
  sometext=...
  moretext=...
  DUMP=
  moretext2=...    
[name2]
  ...

為了替換現有的行,我將執行以下操作:

sed -i '/^\['name'\]$/,/^\[/!b
    /DUMP=/cDUMP=example' $file

我不知道在一兩個班輪中是否可行,但是如果該區塊中不存在DUMP=...我如何添加該選項呢?

范例1:

file1.txt

[name]
  A=text1
  B=text2
  DUMP=x
  C=text3

[name2]
  A=text12
  B=text22
  DUMP=x2
  C=text32

sed '/^\\['name'\\]$/,/^\\[/!b /DUMP=/cDUMP=example' file1.txt輸出:

[name]
  A=text1
  B=text2
  DUMP=example
  C=text3

[name2]
  A=text12
  B=text22
  DUMP=x2
  C=text32

范例2:

file1.txt

[name]
  A=text1
  B=text2
  C=text3

[name2]
  A=text12
  B=text22
  DUMP=x2
  C=text32

sed '/^\\['name'\\]$/,/^\\[/!b /DUMP=/cDUMP=example <add DUMP incase it doesn't exist>' file1.txt輸出:

[name]
  A=text1
  B=text2
  C=text3
  DUMP=example

[name2]
  A=text12
  B=text22
  DUMP=x2
  C=text32
awk '/^\[/&&/]$/&&s&&!f{print "  DUMP=example"; s=0}
     $0 ~ "^\["blockname"]$"{s=1;f=0}
     s&&/^ *DUMP=/{$0="  DUMP=example"; f=1}
     1
     END{if(s&&!f)  print "  DUMP=example"; } blockname="name" <file>

在這里,我們執行了以下操作:

  • 變量s檢查是否找到正確的塊
  • 變量f檢查是否在正確的塊中找到了條目DUMP=
  • /^\\[/&&/]$/&&s&&!f{print " DUMP=example"; s=0} /^\\[/&&/]$/&&s&&!f{print " DUMP=example"; s=0} ::如果輸入一個新塊,而上一個塊是正確的塊( s==1 ),並且該塊沒有DUMP=條目( f==0 ),則寫一個。
  • s&&/^ *DUMP=/{$0=" DUMP=example"; f=1} s&&/^ *DUMP=/{$0=" DUMP=example"; f=1} ::如果我們在正確的塊( s==1 )中,並且找到DUMP=條目,請對其進行更新。

暫無
暫無

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

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