Мне нужно найти строку в файле lvm.conf
, которая начинается со строки, global_filter
, и удалить все, что находится между квадратом. скобки, кроме «r /.*/»
.
Есть только 1 строка, которая начинается с global_filter.
Перед удалением:
global_filter = [ "a|^/dev/sda.*$|", "a|^/dev/sdb.*$|", "r/.*/"]
После удаления должно быть -
global_filter = [, "r/.*/"]
sed -i -e '/^global_filter/{\|"r/\.\*/"|s|.*|global_filter = [, "r/.*/"]|;}' data
sed -i -e '
# look at only lines that begin with global_filter
/^global_filter/{
# and also they should contain the string "r/.*/"
# change everything to the following expression
\|"r/\.\*/"| s|.*|global_filter = [, "r/.*/"]|
## alternatively could be written:
#\|"r/\.\*/"|c\
#global_filter = [, "r/.*/"]
}
' data
Попробуйте это:
$ echo 'global_filter = [ "a|^/dev/sda.$|", "a|^/dev/sdb.$|", "r/.*/"]'|\
sed -E 's/(^global_filter = \[)(.*)(, "r.*$)/\1\3/'
Выход:
global_filter = [, "r/.*/"]