2017-04-03 60 views
1

特定行,我需要在我zshrc文件使用bash脚本添加新的插件,这样做,我搜索包含插件=(sometext)行搜索和替换使用bash

语法

plugin_text=$(grep "^[^#;]" zshrc | grep -n "plugins=(.*)") 

直接在终端上运行我得到:

$ grep "^[^;]" zshrc | grep -n "plugins=(.*)" 
38:# Example format: plugins=(rails git textmate ruby lighthouse) 
40:plugins=(git python pip) 

40是正确的路线但瓦特母鸡我执行我的bash脚本我得到:

$ ./config-minimal 
3:plugins=(git python pip) 

我需要更改40行插入新的插件。例如:

plugins=(git python pip) 

plugins=(git python pip zsh-autosuggestions zsh-syntax-highlighting) 

后,我怎样才能得到这条线,并用简单的方式替换文本

过吗?

我的脚本

function install_zsh { 
    # aptitude install zsh 
    # sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)" 
    # Install zsh highlighting 
    # cd ~/.oh-my-zsh/custom 
    # git clone https://github.com/zsh-users/zsh-syntax-highlighting.git 
    # Install zsh auto suggestions 
    # git clone git://github.com/zsh-users/zsh-autosuggestions 
    # TODO: Add options in plugins 
    cd ~ 
    plugin_text=$(grep "^[^#;]" .zshrc | grep -n "plugins=(.*)") 
    new_plugins=${plugin_text/)/ zsh-autosuggestions zsh-syntax-highlighting)} 
    line_number=${plugin_text/:plugins*/ } 
    sed "$(line_number)s/plugin_text/new_plugins/" .zshrc 
} 
+0

你不需要假设该行是唯一的行号。 – 123

回答

1

你可以用一个简单的sed处理:

sed 's/^plugins=(\(.*\)/plugins=(zsh-autosuggestions zsh-syntax-highlighting \1/' .zshrc 

或(THX @ 123):

sed 's/\(^plugins=([^)]*\)/\1 zsh-autosuggestions zsh-syntax-highlighting/' .zshrc 

添加-i标志INFILE更换。


function install_zsh { 
    # aptitude install zsh 
    # sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)" 
    # Install zsh highlighting 
    # cd ~/.oh-my-zsh/custom 
    # git clone https://github.com/zsh-users/zsh-syntax-highlighting.git 
    # Install zsh auto suggestions 
    # git clone git://github.com/zsh-users/zsh-autosuggestions 
    # TODO: Add options in plugins 

    sed -i.bak 's/^plugins=(\(.*\)/plugins=(zsh-autosuggestions zsh-syntax-highlighting \1/' ~/.zshrc 
} 
+1

也可以这样做'sed's/\(^ plugins =([^)] * \)/ \ 1 zsh-autosuggestions zsh-syntax-highlighting /' – 123

+0

这就对了@ 123 – klashxx