我想通过脚本添加zsh-autosuggestions
插件。~/.zshrc
原文:
plugins=(git)
或者
plugins=(git
some1
some2)
目标 :
plugins=(git
zsh-autosuggestions)
这是行不通的。
sed -i 's/^plugins=\(([^\)]*)\)/plugins=\(\1\nzsh-autosuggestions\n\)/' ~/.zshrc
我很困惑,我认为这
([^\)]*)
是第 1 组,但为什么它不起作用但删除第一组的
()
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)