在 vi 或 less 编辑器中同时突出显示两个字符串?

在 vi 或 less 编辑器中同时突出显示两个字符串?

https://stackoverflow.com/questions/41901319/how-to-search-for-multiple-strings-in-a-log-file-using-less-command-in-unix

我找到了这个。

awk '/pattern1/ && /pattern2/ && /pattern3/' file.log | less

我尝试了这个命令,但这不是我预期的输出。

我想在 vi/less 编辑器中同时突出显示多个搜索字符串或使用 awk 等任何其他东西。

我只是想强调两者,没有其他要求。

/.*(string1.*string2|string2.*string1).*

我尝试了这个,但它突出显示了整个段落,而不是仅突出了两个内容。

我试过https://www.unix.com/shell-programming-and-scripting/124222-commang-search-two-strings-vi.html

这个,它正在显示这个。

/StringOne\|StringTwo

但它导致没有按预期找到模式。

我试过

egrep "one|two" file

这很好,但我不能做下一个,上一个,因为它不是编辑器。所以,有这个警告。

我过去发现的一件事是https://vim.fandom.com/wiki/Highlight_multiple_words 但由于缺乏安装和使用它的文档,我还没有开始。我不确定这是否适用于 linux centos 7。

我使用的是 vim 7.4

答案1

要搜索 或foobar它是

/foo|bar

其中regexps 扩展 POSIX 扩展(类似egrep)正则表达式 whereless是交替运算符。less|

和:

/foo\|bar

或者/vfoo|bar在正则表达式扩展正则表达式vim的地方,正则表达式本身扩展了 POSIX 基本正则表达式,其中单独匹配文字。vimvi||

awk '/foo/ && /bar/'将匹配包含的行两个都 foobar。搜索 a ,foo前提是它在也包含的行上找到bar,或者bar如果它在也包含的行上找到,则可以使用其环视正则表达式运算符foo来完成:vim

 /\vfoo(.*bar)@=|(bar.*)@<=foo|bar(.*foo)@=|(foo.*)@<=bar

那是\v为了非常神奇其中无需前导 即可识别更多运算符\,然后匹配:

  • foo前提是其后跟任意数量的字符并bar使用@=前瞻运算符。
  • foo前提是其前面使用后向运算符bar跟随任意数量的字符。@<=
  • bar前提是后面跟着任意数量的字符并且foo
  • bar前提是其前面foo有任意数量的字符

要在 中打开搜索匹配项的突出显示vim

:set hls

如果你只是想强调无需搜索,您就可以在vim.例如:

:syn match Search "foo"
:syn match Error "bar"

将以与搜索结果和错误foo相同的方式突出显示出现的情况。bar

答案2

突出显示多个单词的一种方法是使用您自己的着色功能,例如:

hilite () 
{ 
    sed "/$1/s/$1/\x1b[01;31m&\x1b[0m/g"
}

然后,您可以输入文本文件并指示要突出显示的单词 - 一次一个:

$ cat infile | hilite word1 | hilite word2 | hilite word3

要在 less 中查看突出显示的文本,请使用 -R 选项:

$ cat infile | hilite word1 | hilite word2 | hilite word3 | less -R

相关内容