텍스트에서 정규식을 강조 표시하는 명령?


14

텍스트에서 특정 표현을 강조하는 명령이 있습니까?

나는 '검색'기능과 같은 것을 덜 찾고 있지만 less뷰어 대신 stdout에서 일반 텍스트 출력을 사용합니다 .

예:

$ cat test.txt | highlight "an"

에 대한 전망 Afgh에서 질서 NATO 탈퇴는 IST는 대통령 하미드 카르자이와 같은 고통이 개 좌절 민주 미국 군대에 DED 한계 탈 리브는 D 평화 협상을 중단합니다.

지정된 정규식을 강조하기 위해 색상이나 다른 수단을 사용할 수 있습니다.


1
가능한 복제 highlight명령
Gilles 'SO-stop

@Gilles, 그러나 그 질문에는 훨씬 더 복잡한 요구 사항이있었습니다.
CJM

답변:


17

이것이 기능 또는 숨겨진 부작용으로 인한 것인지 확실하지 않지만 GNU grep2.11 에서 작동합니다 .

grep --color 'an\|' test.txt

10
마치 당신이하는 것과 같습니다 grep 'an' OR ''. 는 ''성공적으로 입력의 모든 위치에서 아무것도 일치하지 않습니다. 만은 an당신이 아무것도 강조하지 수 없기 때문에, 강조 표시됩니다. :-)
Mikel

순수한 천재. 그것은 나를 위해 작동하지 않았지만 grep --color -e 'an' -e ' '(색칠 할 수없는 공간과 일치하는 것은 속임수였습니다). 에 배관하는 것보다 낫지 만 sed -e ''/an/s//$(printf "\033[33;1m&\033[0m")/''후자가 더 성능이 좋습니다. 다른 검색어에 대해 'an'을 변경하십시오. ;)
sjas

와! 이것을 사용하여 모든 bashrc별칭 을 나열하는 데 사용한 명령을 수정했으며 이제 모든 별칭이 빨간색으로 강조 표시됩니다. 감독자! alias aliases="clear;cat ~/.bashrc|grep --color \"alias\""
Nav

9

ack 에는 다음과 같은 --passthru옵션이 있습니다.

ack --passthru an test.txt
some_command | ack --passthru an -

2
[+1) btw : 우분투 저장소에서 패키지 (및 실행 파일)는 ack-grep... (이름 ack은 간지 코드 변환기에
적용됨

2

이 스크립트를 시험해 볼 수 있습니다. 파일을 지정하거나 표준 입력을받을 수 있습니다. 강조 표시하려는 텍스트에 대해 Python 정규식을 정의 할 수 있습니다. 강조 표시된 텍스트는 기본적으로 네온 녹색 (검정색 배경을 사용합니다!)이지만 ANSI 색상 코드를 변경할 수 있습니다 .

#!/usr/bin/env python

import sys
import re

def highlight_text(text,pat):
    def replacement_funk(matchobj):  return '\x1b[42m%s\x1b[0m'%matchobj.group(0)
    return re.sub(pat,replacement_funk,text)

if __name__ == '__main__':
    if len(sys.argv) == 2:
        input = sys.stdin
        pat = sys.argv[1]
    elif len(sys.argv) == 3:
        input = open(sys.argv[2])
        pat = sys.argv[1]
    else:
        sys.stderr.write("colorme pattern [inputfile]")
    text = input.read()
    print highlight_text(text,pat)

다음 예입니다.

blessburn@blessburn:/tmp$ cat test.txt | ./colorme.py an

에 대한 전망 Afgh에서 질서 NATO 탈퇴는 IST는 대통령 하미드 카르자이와 같은 고통이 개 좌절 민주 미국 군대에 DED 한계 탈 리브는 D 평화 협상을 중단합니다.

blessburn@blessburn:/tmp$ ./colorme.py '(Af.*? |NA[\w]{2})' test.txt

하미드 카르자이 대통령이 미군에 대한 제한을 요구하고 탈레반이 평화 협상을 중단함에 따라 아프가니스탄 에서 질서 정연한 NATO 철수에 대한 전망 은 두 가지 난관을 겪었다.


stackexchange 굵은 마크 업이 펑키 해 보이므로 출력에 별이 더 있습니다. 나를 때린다.
fthinker

<b>단어의 일부를 굵게 표시해야하는 경우 사용하십시오 .
CJM

0

$cat test.txt | grep --colour=auto -C 100000 an

"색상"도 작동합니다. grep이 항상 옵션을 사용하도록 별명을 정의 할 수도 있습니다.

alias grep='grep --colour=auto -C 100000'

위의 내용을 /etc/profile.d/ 어딘가 또는 .bashrc 등에 넣으십시오.


1
일치하는 줄만 인쇄합니다. Frank는 일치하는 항목 만 강조 표시하여 전체 텍스트를 원합니다.
cjm

위의 -C를 추가했습니다. 작동하지만 약간 지저분합니다!
gerdesj

3
그것은 작동하지만 당신은해야 하지 그렙이라는 별칭을 만듭니다. 함께 -C 1000000하면 다시 grep을 할 수 없습니다. 그냥 할 alias highlight='grep --colour=auto -C 1000000'. The cat in the first example is also not necessary: 그렙 --colour = -C 100000 file` 자동차.
Matteo

큰 파일에서 얼마나 많은 메모리를 사용할지 궁금합니다. ( grep컨텍스트 라인 컬렉션을 처리하는 방법을 살펴본 적이 없습니다 .)
cjm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.