文章

vim 搜索过滤满足条件的行

有的时候文本内容太多,我们只需要查看满足条件的内容,虽然可以通过 CTRL-g 、n、N 等快速跳转,但是我们可能只需要查看满足条件的内容,例如在排查错误日志的时候,我们只需要查看满足 err1 的错误信息,但是日志中有太多额外的内容,这个时候可以通过 sed 、awk 、grep 等文本工具过滤处理。但是使用 vim/nvim 也可以实现,而且更加方便查看。

可以使用以下几种方法来搜索关键字并将满足条件的行重定向到另一个文件,或者只显示满足条件的行。假设我想要搜索关键字“aaa”.

使用 :vimgrep 和 :cw 仅显示满足条件的行

可以使用 :vimgrep 命令来搜索关键字并将结果显示在快速修复列表中:

1
:vimgrep /aaa/ %
  • :vimgrep:搜索文件中的模式。
  • /aaa/:搜索关键字 aaa。
  • %:表示当前文件。

然后可以使用 :cw(:copen)命令打开 quickfix 窗口,仅显示匹配行:

1
:cw

重定向到另一个文件

使用 :g 命令来查找所有包含关键字的行,并将这些行写入到另一个文件中:

1
:g/aaa/w newfile.txt
  • :g/aaa/:查找所有包含关键字 aaa 的行。
  • w newfile.txt:将这些行写入到 newfile.txt 文件中。

使用外部文本工具

如果在 Linux 系统也可以直接使用 grep 等文本处理工具处理,通过 :! grep "aaa" % > results.txt 将处理之后内容重定向到另一个文件中。:! 在命令行模式下使用惊叹号可以调用操作系统的命令行工具。

redir 命令

结合 :g 命令和 :redir 命令

1
2
3
:redir > results.txt
:g/aaa/
:redir END

使用 :v 命令仅显示满足条件的行

如果只想在 Vim 中查看满足条件的行,而不需要重定向到文件,可以使用 :v 命令隐藏不满足条件的行:

1
:v/aaa/d

:v/aaa/d:删除不包含关键字 aaa 的行,仅保留匹配的行。

本文由作者按照 CC BY 4.0 进行授权

© TheDarkStarJack. 保留部分权利。

[本站总访问量次] [本站访客数人次] [本文总阅读量次]

本站采用 Jekyll 主题 Chirpy