在Vim中,我试图找到连续2行的' 9'在第31栏。我试过了
exam_type_id
没有运气。如何在正则表达式中指定新行字符?我想使用^.\{30\}9.*$.\{30\}9
^.\{30\}9.*\n.\{30\}9
^.\{30\}9\_.*^.\{30\}9
运算符,而不是/
或s:
示例数据:
g:
第5行& 6应该是一场比赛。
添加Solaris标记以查看是否有人可能知道vi的风格。
答案 0 :(得分:1)
万一你的文件有DOS行结尾(\r\n
),其中一个应该有效:
^.\{30\}\zs9.*\r\?\n.\{30\}9
^.\{30\}\zs9.*[\r\n]\{1,2\}.\{30\}9
我添加了一个可选的回车符来计算DOS行结尾。我还添加了\zs
来限制匹配从第一个9
开始(这会在您搜索时将光标放在该字符上,但如果您使用{{1}则会更加引人注目}})。您不需要set hlsearch
来进行比赛。
我上面的第一个vim正则表达式相当于PCRE中的\zs
,explained here。
第二个正则表达式有点宽泛,允许两个换行符的任意组合,但也允许两个条目之间有一个空行(^.{30}\K9.*\r?\n.{30}9
),这可能是您可能接受的,也可能是不可接受的。
如果这些都不适合您,我建议您在问题中指定您的Vim和Solaris版本,并可能在问题中添加solaris标记。