LINUX.ORG.RU

sed / awk - помощь по изменению строки в bash

 , ,


0

1

Господа, приветствую! Возникла необходимость править чать файла конфигурации. Как править на основе шаблонов немного разбираюсь, но тут возникла задача заменить срочку после паттерна, а не на его основе. Т.е. мне нужно изменить строчку " path = /home/user/Media/Temp/" после " [Temp]" на другое значение. Собственно проблема состоит в том, что значение «/home/user/Media/Temp/» здесь для примера, оно не известно скрипту перед изменением. Другими словами, нужно неизвестную строчку после " [Temp]" изменить на новое значение.

[Foto]
        path = /media/user/Media/Foto/
        comment = Альбомы фотографий
        
 [Temp]
        path = /home/user/Media/Temp/
        comment = Temp

Гуглить пробовал, но все не то. До чего дошел своими силами: Добавить к строке «опознавательный знак» в виде комментария " path = /home/user/Media/Temp/ # temp" и на его основе править строку:

FOLDER=$(kdialog --getexistingdirectory)
A=' # temp'
B="        path = $FOLDER/ # temp"
sed -i "s|.*${A}|${B}|g" /etc/rsyncd.conf

и это работает. Жаль только с этим комментарием rsync не дружит, не понимает путь. Требует чистого параметра, без комментариев. Подскажите, плиз, как поменять строку. Возможно как-то ее удалить, и после «sed -i »/[Temp]/ a\........", или как-то еще. Заранее благодарю.

$ echo '[unrelated]
path=/bin
[temp]
path=/blah
comment=foobar
[another]
path=/usr' | sed -e '
/\[temp\]/ {
n
c\path=/abababa
}'
[unrelated]
path=/bin
[temp]
path=/abababa
comment=foobar
[another]
path=/usr
anonymous ()
Ответ на: комментарий от Pashtet

Попробуй двойные кавычки вместо одинарных.

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

Спасибо! Все работает! Там после «-r» нужно еще «i» поставить. «sed -ri». ОГРОМНОЕ спасибо!

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