Чтобы удалить все, заключенное в квадратные скобки

Мне нужно найти строку в файле lvm.conf , которая начинается со строки, global_filter , и удалить все, что находится между квадратом. скобки, кроме «r /.*/» .

Есть только 1 строка, которая начинается с global_filter.

Перед удалением:

global_filter = [ "a|^/dev/sda.*$|", "a|^/dev/sdb.*$|", "r/.*/"]

После удаления должно быть -

global_filter = [, "r/.*/"]
0
21.11.2018, 00:25
2 ответа
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
1
28.01.2020, 02:45

Попробуйте это:

$ echo 'global_filter = [ "a|^/dev/sda.$|", "a|^/dev/sdb.$|", "r/.*/"]'|\
sed -E 's/(^global_filter = \[)(.*)(, "r.*$)/\1\3/'

Выход:

global_filter = [, "r/.*/"]
0
28.01.2020, 02:45

Теги

Похожие вопросы