我需要从配置文件中删除参数的值。问题在于该值在\n
中有多行,并且配置文件中的多个节具有相同的参数。
我有这样的东西
[Section1 : Common]
; @label:
par1 = "va1
val2"
[Section2 : Common]
; @label:
par1 = "val3"
我需要
[Section1 : Common]
; @label:
par1 = ""
[Section2 : Common]
; @label:
par1 = "val3"
尝试使用sed
无济于事
sed -i.bak 's/^\(par1 ="\).*/\1 ""/' cfg.ini
它将替换第一行:
[Section1 : Common]
; @label:
par1 = ""
val2"
答案 0 :(得分:0)
如果您具有GNU sed(版本> = 4.2.2),则可以使用选项-z
来捕获多于1行:
sed -i.bak -z 's/\(\[Section1 : Common\][^[]\+par1 = "\)[^"]\+"/\1"/' file
正则表达式匹配所需的部分和字符串par1 =
,并用一个空的字符串替换引号。
答案 1 :(得分:0)
Perl一种衬管解决方案:
> cat params.txt
[Section1 : Common]
; @label:
par1 = "va1
val2"
[Section2 : Common]
; @label:
par1 = "val3"
> perl -e 'BEGIN{ $x=qx(cat params.txt); $x=~s/\".+?\n.+?\"/\"\"/smg; print "$x";exit } '
[Section1 : Common]
; @label:
par1 = ""
[Section2 : Common]
; @label:
par1 = "val3"
>