LINUX.ORG.RU

sed, работать только в одной [секции] ini-файла

 ,


1

3

Привет, $LOR_USER! Есть две команды на баше:

1. отключение вуфайнда из скрипта:

sed -i "/^available\\s*=/s/=.*/= false/" /usr/local/vufind/local/config/vufind/config.ini
2. включение вуфайнда из скрипта:
sed -i "/^available\\s*=/s/=.*/= true/" /usr/local/vufind/local/config/vufind/config.ini

Теперь надо доработать их, чтобы они не по всему ini-файлу искали и редактировали, а только в секции [System], то есть редактировать после строки [System], но до [следующей-секции]. Как это сделать?

★★★★★

Последнее исправление: Infra_HDC (всего исправлений: 1)

$ cat -n 1.txt 
     1	1
     2	1
     3	1
     4	1
     5	1
     6	1
$ sed '2,5 s/1/2/' 1.txt 
1
2
2
2
2
1

Указывай номера строк С и ПО, в пределах которых нужно производить замену.

Yorween
()

Как это сделать?

По умному – через Python + configparser, либо с помощью любого другого языка и библиотеки для работы с ini-файлами.

По идиотски – написать костыль на смеси из говнобаша/sed/awk и прочего помёта, который сломается как только конфиг немного изменит структуру.

EXL ★★★★★
()

python configparser

anonymous
()

не по всему ini-файлу искали и редактировали, а только в секции [System], то есть редактировать после строки [System], но до [следующей-секции]. Как это сделать?

Вместо номеров строк «с» и «по» можно указывать regexp-ы этих строк:

sed -r -i '/^\[System\]/,/^\[/ { /^available\s*=/  s/=.*/= true/ }' /usr/local/vufind/local/config/vufind/config.ini
Это работает, даже если секция [System] последняя (после этой строки нет больше строк начинающихся с «[»).

spirit ★★★★★
()
Ответ на: комментарий от spirit

И вообще подобные вещи можно вынести во внешний скрипт:

#
# vi: ft=sed :
#

/^\[System\]/,/^\[/ {
	/^available\s*=/  s/=.*/= true/
}

и наслаждаться подсветкой синтаксиса в vim.

Только -i без аргумента не будет работать на *BSD и Darwin (тоже BSD). Портируемый вариант – -i'.orig' (без пробела) с последующим rm *.orig.

Bass ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.