Vim正则多行搜索:如何查找31列含'9'的连续两行?
在Solaris vi中匹配连续两行第31列均为'9'的方法
针对你在Solaris vi里的需求,要找到连续两行第31列都是字符'9'的内容,关键是正确处理跨行匹配和列位置定位,以下是具体步骤和解释:
核心搜索模式
在Solaris的传统vi中,需要使用POSIX基本正则表达式(BRE),并且通过特殊方式表示换行符。正确的搜索模式如下:
^.\{30\}9\ ^.\{30\}9
分步输入方法
- 按
/进入搜索模式; - 输入
^.\{30\}9:^匹配行首;.\{30\}表示任意30个字符(BRE中必须用\{n\}表示重复次数,不能直接用{30});9就是你要找的第31列的字符;
- 接下来匹配换行符:输入
\,然后按Ctrl+V再按Enter(这一步会插入一个带反斜杠的换行符,是vi中搜索跨行内容的标准方式); - 最后输入
^.\{30\}9,完成整个模式; - 按
Enter执行搜索,就能定位到连续两行第31列都是'9'的内容(比如你示例中的第5、6行)。
常见问题说明
- 如果你之前尝试失败,大概率是这两个原因:
- 用了扩展正则的
{30}而非BRE要求的\{30\},导致量词不生效; - 用了
\n表示换行,但在Solaris vi的搜索模式中,\n不代表换行符,必须用\+实际换行(通过Ctrl+V Enter插入)才能匹配跨行内容。
- 用了扩展正则的
辅助验证技巧
可以先执行:set number显示行号,:set list显示所有不可见字符(包括换行符、空格),这样能更直观地确认第31列的位置是否正确,避免列数计数错误。
内容的提问来源于stack exchange,提问作者doobop
相关产品推荐
相关产品推荐

