insere uma string em uma lista de variáveis no arquivo de texto [use sed]

1

Eu quero adicionar zsh-autosuggestions plugin a ~/.zshrc por script.

texto original:

plugins=(git)

ou

 plugins=(git
 some1
 some2)

target:

plugins=(git
zsh-autosuggestions)
  1. Isso não funciona.

    sed -i  's/^plugins=\(([^\)]*)\)/plugins=\(\nzsh-autosuggestions\n\)/' ~/.zshrc
    

    Estou confuso, acho que este ([^\)]*) é o grupo 1, mas porque não funciona

  2. mas remova ()

    do primeiro grupo
    sed -i  's/^plugins=\([^\)]*\)/plugins=\(\nzsh-autosuggestions\n\)/' ~/.zshrc
    

    entregue-se a

    plugins=((git
    zsh-autosuggestions
    )
    )
    

    Eu escapei do () by \ , por que ele se tornou o grupo 1?

por Mithril 06.01.2018 / 10:09

2 respostas

1

Sed solução:

Amostra ~/.zshrc contents:

param=val1
plugins=(git)
param2=val2

plugins=(git
some1
some2)
param3=val3
sed '/^plugins=/ N;N; s/\(=([^)]*\))/\nzsh-autosuggestions)/' ~/.zshrc
  • N - adicione uma nova linha ao espaço de padrão e, em seguida, anexe a próxima linha de entrada ao espaço de padrão
  • \(...\) - grupo capturado regex; deve ser escapado com \ em BRE para ativar seu significado especial

A saída:

param=val1
plugins=(git
zsh-autosuggestions)
param2=val2

plugins=(git
some1
some2
zsh-autosuggestions)
param3=val3
    
por 06.01.2018 / 10:19
0

Abaixo, o comando funciona bem para mim

Comando

 echo "plugins=(git)" | sed "s/(.*[^)]/&\nzsh-autosuggestions/g"

Saída

plugins=(git
zsh-autosuggestions)
    
por 06.01.2018 / 14:38

Tags