Я считаю, что это делает то, что вам нужно:
addition=', "a|^/dev/sda2$|"'
expression='/global_filter/ s@(, "r)@'"$addition"\\1'@'
sed -r -i.orig "${expression}" /etc/lvm.conf
Хитрость здесь заключается в использовании сопоставления с образцом sed для сопоставления строки с /global_filter/, а затем с помощью поиска/замены, чтобы просто заменить бит вокруг запятой: , "r
с вашим новым дополнением.
Флаг '-r' требуется здесь для sed, чтобы захватить часть ' , "r ' со скобками '(шаблон)', чтобы вы могли затем повторно -вставьте его после вашего добавления, используя обратную ссылку "\1"
Или, что проще понять, без соответствия -r и '()':
addToFilter()
{
device="${1}"
addition='"a|^'"${device}"'$|"'
insert_before=', "r'
replacement=", ${addition}${insert_before}"
line_match="global_filter"
expression="/${line_match}/ s@${insert_before}@${replacement}@"
sed -i.orig -e "${expression}" /etc/lvm.conf
}
addToFilter "/dev/sda2"
Я предположил, что 'dev/dasda2' в вашем примере ввода файл не является истинным вводом, но остался там после неудачного редактирования.
Я загрузил программное обеспечение и разархивировал его во временную директорию / tmp / tim / videorepair. Я использую винную версию 1.8. Он работает на моей машине с Ubuntu. Сначала мне нужно выбрать язык, затем появится небольшое окно сообщения в демонстрационном режиме, а затем откроется приложение.
cd /tmp/tim/videorepair
WINEPREFIX="/tmp/tim/wine_gs" WINEARCH=win32 wine wineboot
WINEPREFIX="/tmp/tim/wine_gs" WINEARCH=win32 wine gs.exe