使用sed和regex查找并替换字符串

奥蒂斯·赖特(Otis Wright)

所以我在下面的字符串config.fish,以及init.vim

鱼:eval sh ~/.config/fish/colors/base16-monokai.dark.sh
Vim:colorscheme base16-monokai
Vim:let g:airline_theme='base16_monokai'

我有以下shell脚本:

#!/bin/sh

theme=$1
background=$2

if [ -z '$theme' ]; then

    echo "Please provide a theme name."

else

    if [ -z '$background' ]; then
        $background = 'dark'
    fi

    base16-builder -s $theme -t vim -b $background > ~/.config/nvim/colors/base16-$theme.vim &&
    base16-builder -s $theme -t shell -b $background > ~/.config/fish/colors/base16-$theme.$background.sh &&
    base16-builder -s $theme -t vim-airline -b $background > ~/.vim/plugged/vim-airline-themes/autoload/airline/themes/base16_$theme.vim

    sed -i -e 's/foo/eval sh ~/.config/fish/colors/base16-$theme.$background.sh/g' ~/Developer/dotfiles/config.fish
    sed -i -e 's/foo/colorscheme base16-$theme/g' ~/Developer/dotfiles/init.vim
    sed -i -e 's/foo/let g:airline_theme='base16_$theme'/g' ~/Developer/dotfiles/init.vim


fi

基本上,想法是脚本将生成使用此生成传递的任何主题

我曾尝试查阅此文档,但是我对regex并不熟练,因此,如果有人可以帮我,我将不胜感激。

我需要做的是,一旦生成脚本,sed就会查找上述字符串,并用新生成的主题字符串替换主题。

乐宝

试试这个 :

sed -i "s|\(eval sh ~/\.config/fish/colors/base16-\)\([^.]*\)\.\([^.]*\)\\(.*\)|\1$theme.$background\4|
" ~/Developer/dotfiles/config.fish
sed -i "s/\(base16\)\([-_]\)\([a-zA-Z]*\)/\1\2$theme/g" ~/Developer/dotfiles/init.vim

假设第二个sed命令中的主题是字母数字字符串。如果没有,您可以[a-zA-Z]使用其他字符(例如[a-zA-Z0-9]来完成字符范围:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章