Найти и удалить значения параметров нескольких строк из раздела конфигурации - PullRequest
0 голосов
/ 17 октября 2018

Мне нужно удалить значение параметра из файла конфигурации.Проблема в том, что значение имеет несколько строк с \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 голосов
/ 17 октября 2018

решение Perl one liner:

> 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"
>
0 голосов
/ 17 октября 2018

Если у вас есть GNU sed (версия> = 4.2.2), вы можете использовать опцию -z, которая позволяет захватывать более 1 строки:

sed -i.bak -z 's/\(\[Section1 : Common\][^[]\+par1 = "\)[^"]\+"/\1"/' file

Регулярное выражение соответствует требуемому разделу истрока par1 = и заменяет строку в кавычках пустой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...