所以我在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
基本上,我们的想法是脚本会生成使用此builder传递的主题。
我试过引用这个documentation,但我对正则表达式并不熟练,所以如果有人能帮我一把,我会很感激。
我需要发生的是,一旦生成脚本sed
将查找上述字符串并用新生成的主题替换主题。
答案 0 :(得分:1)
试试这个:
[a-zA-Z]
在第二个sed命令中假设主题是一个字母数字字符串。如果没有,您可以填写字符范围:[a-zA-Z0-9]
以及其他字符(例如ControlGroup
)。
答案 1 :(得分:1)
您可以使用以下语法替换sed中的内容:sed "s#regex#replacement#g"
。由于您的字符串中包含/
和'
,因此最简单的方法是不需要将其删除。
有些字符需要转义才能制作正则表达式。需要使用.
转义$
和\
。替换字符串中的$
也需要进行转义。
如果要从匹配中捕获某个部分,最简单的方法是使用char类。例如,如果您希望替换为eval sh ~/\.config/fish/colors/base16-([^.]+)\.dark\.sh
,airline_theme='$1_base16_\$theme'
将是正则表达式。在这种情况下,替换中的$ 1是正则表达式中捕获的东西。
[^.]+
将捕获截至下一个.
我希望这有助于您更好地了解正则表达式!这应该足够详细,告诉你如何编写自己的。
答案 2 :(得分:0)
您需要使用双引号进行参数扩展而不是单引号
您需要转义单引号:'hello'\''world'
我会为你制作一行,并将其作为练习来修复其他行
sed -i -e 's~\(let g:airline_theme='\''\)[^'\'']*\('\'\)'~base16_'"$theme"~' ~/Developer/dotfiles/init.vim
答案 3 :(得分:0)
sed表达式字符串中s
之后的第一个字符用作模式分隔符,因此首先放置/
指定/作为分隔符。
另外使用单引号告诉shell不要扩展任何变量,你将要使用双引号。
尝试类似
的内容sed -i -e "s#foo#eval sh ~/.config/fish/colors/base16-$theme.$background.sh#g" ~/Developer/dotfiles/config.fish
正如您现在评论的那样,您需要找到上一个主题字符串而不是foo
sed -i -e "s#eval sh \~/\.config/fish/colors/base16-.*?\..*?\.sh#eval sh ~/.config/fish/colors/base16-$theme.$background.sh#g" ~/Developer/dotfiles/config.fish