[英]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.