1

Я хотел бы заменить строку в разделе файла smb.conf, используя awk, sed или оба, если это необходимо. Вот раздел в файле ...

[CMI] oplocks = no wide links = no writeable = yes delete readonly = yes path = /LOCALSITE/CMI comment = CMI Data write list = @cbishare valid users = @cbishare create mode = 775 directory mode = 775

Я хотел бы использовать этот код для последующего повторного использования с переменной для запуска в разных разделах файла smb.conf. Так что просто найти "список записи" в каждом разделе не получится.

Я могу проанализировать файл и получить раздел, используя этот код ...

awk '/\[\CMI\>\]/,/^$/' /etc/samba/smb.conf

или с седом ...

sed -n '/\[\CMI\>\]/,/^$/{p}' /etc/samba/smb.conf

Теперь мне нужно заменить в файле определенную строку в этом диапазоне, например «список записи». Я новичок в sed или awk, и я не нашел никакой информации о том, как выполнить последнюю часть.

Я подумал, что, возможно, смогу получить NR строки, а затем использовать sed, чтобы переписать его.

Любые мысли о том, как это сделать или ссылки на решение будет принята с благодарностью.

1 ответ1

0

С sed

Чтобы заменить значение "список записи" в разделе CMI и только в разделе CMI:

sed '/\[\CMI\>\]/,/^$/ s/\s*write list =.*/ write list = New Value/' smb.conf

Это заменяет старое значение write list New Value . Предполагается, как и предполагалось в вашем коде, что разделы в smb.conf заканчиваются пустой строкой.

С awk

Так же:

awk '/\[\CMI\>\]/,/^$/ {if ($1=="write" && $2=="list") {$0=" write list = New Value"}} 1' smb.conf

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .