我找到了这个。
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
要搜索 或foo
,bar
它是
/foo|bar
其中regexps 扩展 POSIX 扩展(类似egrep)正则表达式 whereless
是交替运算符。less
|
和:
/foo\|bar
或者/vfoo|bar
在正则表达式扩展正则表达式vim
的地方,正则表达式本身扩展了 POSIX 基本正则表达式,其中单独匹配文字。vim
vi
|
|
awk '/foo/ && /bar/'
将匹配包含的行两个都 foo
和bar
。搜索 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