Para apagar tudo entre colchetes

0

Eu preciso encontrar a linha em um arquivo lvm.conf que começa com string, global_filter e remover tudo entre colchetes, exceto "r/.*/" .

Existe apenas 1 linha que começa com global_filter.

Antes da remoção:

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

Após a remoção, deve ser -

global_filter = [, "r/.*/"]
    
por user7290726 24.07.2017 / 13:11

2 respostas

1
sed -i -e '/^global_filter/{\|"r/\.\*/"|s|.*|global_filter = [, "r/.*/"]|;}' data

Explicação

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
    
por 24.07.2017 / 13:21
0

Tente isto:

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

Saída:

global_filter = [, "r/.*/"]
    
por 24.07.2017 / 13:21

Tags