原文:

原文:

我想通过脚本添加zsh-autosuggestions插件。~/.zshrc

原文:

plugins=(git)

或者

 plugins=(git
 some1
 some2)

目标 :

plugins=(git
zsh-autosuggestions)
  1. 这是行不通的。

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

    我很困惑,我认为这([^\)]*) 是第 1 组,但为什么它不起作用

  2. 但删除第一组的()

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

    结果是

    plugins=((git
    zsh-autosuggestions
    )
    )
    

    我已经逃过了()by \,为什么它变成了 group 1 ?

答案1

Sed解决方案:

样本~/.zshrc内容:

param=val1
plugins=(git)
param2=val2

plugins=(git
some1
some2)
param3=val3

sed '/^plugins=/ N;N; s/\(=([^)]*\))/\1\nzsh-autosuggestions)/' ~/.zshrc
  • N- 将换行符添加到模式空间,然后将下一行输入附加到模式空间
  • \(...\)- 正则表达式捕获的组;应该用\in转义布雷使其具有特殊的意义

输出:

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

plugins=(git
some1
some2
zsh-autosuggestions)
param3=val3

答案2

下面的命令对我来说效果很好


命令

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

输出

plugins=(git
zsh-autosuggestions)

相关内容