$ echo "haha#nihao" | sed "s/#.+$/end/"
haha#nihao
我想匹配字符#
和行尾之间的内容。为什么我不能得到它?
:%!sed "s/#.\+$/end/"
E194:No alternate file name to substitute for '#'
问题1:
为什么我不能在vim的sed中使用它?
问题2: 怎么看EORROR 194?
答案 0 :(得分:1)
问题1:为什么我不能在vim的sed中使用它?
因为默认情况下sed
使用BRE,所以使用基本的正则表达式:
/.+/
这匹配任何字符后跟“+”/.\+/
匹配任何字符的一个或多个匹配项您可以告诉sed
在GNU实现中使用带有-r
标志的扩展正则表达式,并使用带有BSD实现的-E
标志:
$ echo "haha#nihao" | sed -r "s/#.+$/end/"
hahaend
问题2:如何看EORROR 194?
您收到此错误是因为当您使用#
运行命令时,vim
在!
中具有特殊含义:命令行上的#
标记将替换为备用文件。如果你逃避#
:
%!sed "s/\#.\+$/end/"
您可以使用:help E194
命令以及:help alternate-file
的备用文件来了解此错误。
答案 1 :(得分:0)
使用sed -r
echo "haha#nihao" | sed -r "s/#.+$/end/"
hahaend
来自man sed
-r, --regexp-extended
use extended regular expressions in the script.