从配置部分查找和删除多行参数值

时间:2018-10-17 08:34:33

标签: linux bash shell command-line

我需要从配置文件中删除参数的值。问题在于该值在\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"

2 个答案:

答案 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"
>