私はこれを見つけました。
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
またはを検索するにはfoo
:bar
/foo|bar
その中で、regexpsはless
代替演算子を持つPOSIX拡張(egrepと同様)正規表現を拡張します。less
|
そして:
/foo\|bar
あるいは、/vfoo|bar
正規表現が正規表現を拡張すると、vim
正規表現自体はリテラルのみに一致するPOSIX基本正規表現を拡張します。vim
vi
|
|
awk '/foo/ && /bar/'
次を含む行と一致します。両方 foo
そしてbar
。foo
含まれている行で見つかった場合、またはbar
含まれbar
ている行で見つかった場合は、検索正規表現演算子を使用して検索できますfoo
。vim
/\vfoo(.*bar)@=|(bar.*)@<=foo|bar(.*foo)@=|(foo.*)@<=bar
\v
それは素晴らしい先行することなく、より多くの演算子が認識され、一致\
します。
foo
ただし、その後に任意の数の文字が続き、プレビュー演算子をbar
使用します。@=
foo
Lookbehind演算子を使用して、前にbar
複数の文字がある場合に提供されます。@<=
bar
ただし、その後ろには任意の数の文字があります。foo
bar
foo
前に任意数の文字がある場合
検索一致の強調表示をオンにするには、次の手順を実行します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