我似乎无法弄清楚如何删除这些行。
在VIM中,我尝试了以下操作并且没有执行:
:%s/[0-9]{4}\-[0-9]{2}\-[0-9]{2}/d
然后我收到此错误:找不到模式。
我可以执行以下操作并获得结果:
egrep '[0-9]{4}\-[0-9]{2}\-[0-9]{2}' file
打印出来:
2006-12-18
2007-02-05
2007-02-13
2007-03-06
2007-03-13
2007-04-03
2007-04-15
2007-04-16
2007-04-24
2007-05-18
2007-06-14
2007-07-15
2008-05-14
2008-05-20
2008-06-03
2008-06-10
2008-06-11
2008-06-19
2008-06-25
2008-07-15
2008-07-21
2009-10-21
2010-07-02
在VIM中,我尝试在模式的开头添加^
,在结尾添加$
,但仍然无法识别模式。
我在使用终端的Mac 10.11.2(15C50)El Capitan上使用VIM。
sed也给了我一些问题。我试过了:
sed -i '/^[0-9]{4}\-[0-9]{2}\-[0-9]{2}$/d' file
我收到错误:
sed: 1: "file": command c expects \ followed by text
我使用-i
使用"sed 's/pattern//g' file"
和sed -e
尝试使用或不使用[0-9]
,但这些都没有对文件做任何事情。
我也尝试用[:digit:]
替换sed -i '/[:digit:]{4}\-[:digit:]{2}\-[:digit]{2}/d' file
,但这也不起作用:
sed: 1: "file": command i expects \ followed by text
结果出现以下错误:
{{1}}
请帮忙。谢谢!
答案 0 :(得分:3)
BRE
,然后您应该逃避{
以赋予其特殊含义。sed
默认使用BRE,但您可以添加-r
(gnu sed)让sed与ERE
一起使用,然后您的正则表达式就可以正常工作。-
不是正则表达式中的特殊字符,(除非它位于[...]
之间),所以你不需要转义它magic
设置为magic
,因此您还需要转义{
:%s/\vpattern....
\v
:%s/../../
会让very magic
与:h magic
一起使用。 # @player is the turn taking player
def score(game)
if game.win?(@player)
return 10
elsif game.win?(@opponent)
return -10
else
return 0
end
end
了解详情。答案 1 :(得分:2)
在Vim中,我认为你有错误的东西被转义,并且正在使用错误的命令 - s是替换,而不是运行行删除命令;尝试
:g/\d\{4}-\d\{2}-\d\{2}/d
(您可以使用[0-9]
,但\d
似乎更整洁 - :help \d
说它更快)