используя sed для сопоставления нескольких подстрок и замены - PullRequest
0 голосов
/ 07 января 2020

В bash Я ищу способ обновить строку в файле:

/dev/vg/home /home ext4  defaults,noatime,nofail,nodev 0 2

, если строка содержит '/ home ext4', заменить 'nodev' на 'nodev, nosuid' :

/dev/vg/home /home ext4  defaults,noatime,nofail,nodev,nosuid 0 2

Ответы [ 3 ]

1 голос
/ 07 января 2020

Следующее не проверено.

Команда sed дает команду замены в любой строке, содержащей / home ext4.

sed -i '/\/home ext4/s/nodev/nodev,nosuid/' /path/to/file
1 голос
/ 07 января 2020

если строка содержит '/ home ext4', замените 'nodev' на 'nodev, nosuid':

sed '/\/home.*ext4/s/nodev/nodev,nosuid/'

Если строка соответствует /home<anything>ext4, тогда подставьте 'nodev' , с 'nodev, nosuid'.

1 голос
/ 07 января 2020

Не могли бы вы попробовать следующее.

sed '/\/home ext4/s/nodev/nodev,nosuid/g'  Input_file

ИЛИ выбрать другой разделитель как #, а не по умолчанию /, чтобы избежать путаницы, поскольку в вашем ключевом слове /home ext4 есть / из которого нам нужно уйти, чтобы сообщить sed, что это не разделитель, а значение строки, поэтому, несмотря на экранирование, мы можем использовать другой разделитель.

sed '\#/home ext4#s/nodev/&,nosuid/' Input_file

Если вы видите Приведенное выше решение тщательно нам не нужно экранировать /, так как разделитель sed здесь #, кстати, вы также можете выбрать его по своему усмотрению. Спасибо @potong сэр за руководство по правильному регулярному выражению для этого кода.

...