vi以下のエディタで2つの文字列を同時に強調表示しますか?

vi以下のエディタで2つの文字列を同時に強調表示しますか?

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).*

試してみましたが、2つの内容だけを強調表示せず、段落全体を強調表示しました。

頑張ったhttps://www.unix.com/shell-programming-and-scripting/124222-commang-search-two-strings-vi.html

これ、これを見せています。

/StringOne\|StringTwo

しかし、予想通りパターンが見つかりません。

頑張った

egrep "one|two" file

これは大丈夫ですが、次は、以前は編集者ではないのでできません。だからこんな警告があります。

私が以前に見つけたものの1つは、https://vim.fandom.com/wiki/Highlight_multiple_words しかし、インストールと使用に関する文書がないため、まだ起動していません。これがLinux Centos 7で動作するかどうかはわかりません。

私はvim 7.4を使用しています

答え1

またはを検索するにはfoobar

/foo|bar

その中で、regexpsはless代替演算子を持つPOSIX拡張(egrepと同様)正規表現を拡張します。less|

そして:

/foo\|bar

あるいは、/vfoo|bar正規表現が正規表現を拡張すると、vim正規表現自体はリテラルのみに一致するPOSIX基本正規表現を拡張します。vimvi||

awk '/foo/ && /bar/'次を含む行と一致します。両方 fooそしてbarfoo含まれている行で見つかった場合、またはbar含まれbarている行で見つかった場合は、検索正規表現演算子を使用して検索できますfoovim

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

\vそれは素晴らしい先行することなく、より多くの演算子が認識され、一致\します。

  • fooただし、その後に任意の数の文字が続き、プレビュー演算子をbar使用します。@=
  • fooLookbehind演算子を使用して、前にbar複数の文字がある場合に提供されます。@<=
  • barただし、その後ろには任意の数の文字があります。foo
  • barfoo前に任意数の文字がある場合

検索一致の強調表示をオンにするには、次の手順を実行しますvim

:set hls

欲しいなら強調する検索する必要はありません。たとえば、次のようになりますvim

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

発生項目は検索結果やエラーとfoo同様に強調表示されます。bar

答え2

複数の単語を強調表示する1つの方法は、独自の色付け機能を使用することです。たとえば、次のようになります。

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

その後、テキストファイルを入力して、強調表示する単語を一度に1つずつ表示できます。

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

強調表示されたテキストを少なくするには、-R オプションを使用します。

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

関連情報