Моя первоначальная проблема заключалась в том, чтобы добавить строку в конец определенного блока в файле конфигурации.Не могу понять шаблон sed
############
# MY BLOCK #
############
VALUE1 = XXXXX
VALUE2 = YYYYY
MYNEWVALUE = XXXXX <<< I want to add this one
##############
# MY BLOCK 2 #
##############
Для этого я использовал следующий сценарий и патч в это работает безотказно (нашел его в другой должности):
sed -i -e "/# MY BLOCK #/{:a;n;/^$/!ba;i\MYNEWVALUE = XXXXX" -e '}' myfile
Это работало отлично, когда выполняется внутри сценария оболочки, но я не могу управлять использовать его непосредственно в интерактивной оболочке (это дало мне ошибку: «! ba event not found»). Чтобы решить эту проблему, я попытался добавить «\» до «! Ba», но теперь это дало мне еще одну ошибку, которая говорит мне, что «\» - неизвестная команда.
Может ли кто-нибудь объяснить, где моя ошибка по вышеуказанной проблеме и как работает этот скрипт?
Вот мое понимание:
-i : insert new line (i think the first one is useless, am i right?)
-e : execute this sed script (don't understand why there is a second one at the end to close the })
:a : begin a loop
n : read each line with the pattern ^$ (empty lines)
! : reverse the loop
ba : end of the loop
Спасибо!
'-i' сокращен для' --in-place' (заменить файл ввода измененным контентом), '-e' является сокращенным для' -expression'. Чтение 'man sed' показало бы вам (и больше) вам. –
Я сделал это, спасибо за ответ. Я только хотел узнать, как sed делает свою работу, так как вы можете видеть, что мои -i и -e близки к описанию человека. – Arka