나는 이것을 찾았다.
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는 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
여러 단어를 강조 표시하는 한 가지 방법은 고유한 색상 지정 기능을 사용하는 것입니다. 예를 들면 다음과 같습니다.
hilite ()
{
sed "/$1/s/$1/\x1b[01;31m&\x1b[0m/g"
}
그런 다음 텍스트 파일을 입력하고 강조 표시할 단어를 한 번에 하나씩 표시할 수 있습니다.
$ cat infile | hilite word1 | hilite word2 | hilite word3
강조 표시된 텍스트를 더 적게 보려면 -R 옵션을 사용하십시오.
$ cat infile | hilite word1 | hilite word2 | hilite word3 | less -R