다른 색으로 키워드를 표시하십시오.


13

나는 출력을 뱉어내는 프로그램을 가지고 stdout있다 :

[OK]      Something is ok
[OK]      Something else is also ok
[FAIL]    This does not look good
[FAIL]    Neither does this
[OK]      At least this is fine

출력에서 실패를 더 쉽게 발견하기 위해 다른 메시지 버리지 않고 키워드의 발생을 FAIL빨간색 으로 표시하고 싶습니다 . 녹색으로 키워드를 강조 표시하면 좋을 것입니다 :).OK

파이프를 사용하면 키워드가 egrep --color FAIL있는 줄만 표시됩니다 FAIL.


1
A에 대한 grep해결책을 참조 unix.stackexchange.com/a/34322
manatwork

소스 코드를 변경할 수 있습니까? bash 스크립트입니까?
h3rrmiller

당신은 내가 내 길을 클릭하면 지정된 링크에서 @manatwork stackoverflow.com/questions/972370 및 일부 tail -fawk마법, 나는) = 갈 수입니다
테오도르

답변:


10

manatwork다른 질문에서 '작거나 아무것도없는'해킹을 기반으로 두 가지 강조 색상 을 얻을 수있는 기능을 추가합니다 .

 $ myprogram | \
   GREP_COLORS='mt=01;32' egrep --color=always '\[OK\]|' | \
   GREP_COLORS='mt=01;31' egrep --color=always '\[FAIL\]|'

즉, 매번 grep다른 GREP_COLORS환경 변수를 사용하여 출력을 두 번 실행 합니다 .

'01; 32 '값은 "굵은 녹색"을 의미하고 다른 하나는 "굵은 빨간색"을 의미합니다. 더 많은 아이디어 는 ANSI 코드에 대한 Wikipedia 기사를 참조하십시오 .

아아, 이것은 GNU grep 버전 2.5.3 이상이 필요합니다. 이전 버전의 GNU grep은 다른 색상 지정 메커니즘을 지원했지만 해당 버전에는 파이프 라인에서 기능을 두 번 이상 사용할 수없는 버그가 있습니다. BSD grep은 오래된 GNU grep 착색 메커니즘을 에뮬레이트하며 파이프 라인에서 두 번 작동하지만 manatwork해킹 으로 인해 "빈 하위 표현식"에 대해 소리칩니다 .

처음 두 줄의 끝에서 백 슬래시를 제거하여 한 줄로 만들 수 있습니다. 명확성을 위해 여기에 나누고 SE 페이지 형식으로 멋지게 연주했습니다.


정말 훌륭합니다! 그러나 어떤 이유로 스크립트는 내 컴퓨터의 두 번째 진술을 강조하지 않는 것 같습니다. CentOS 5를 실행 중입니다.
Theodor

2
여기서 일어나고있는 것은 CentOS 5가 GREP_COLORS복수를 지원하지 않을만큼 오래 된 GNU grep을 제공한다는 것 입니다. 그것은 오래된 GREP_COLOR방법만을 사용하며, 그 방법에는 옳은 일을 방해하는 버그가 있습니다. 사용할 명령을 GREP_COLOR=32변경하면 첫 번째 일치의 강조 색상 만 변경됩니다. 결과를 파이프하면 hexdump -c두 번째 egrep명령 을 추가하면 무언가가 수행되지만 합법적 인 ANSI는 아닙니다. 결론 : grep제대로 작동 하려면 업그레이드해야합니다 .
워렌 영

하하, 그런 통찰력있는 코멘트입니다. 예, CentOS5는 오래된 OS에서 많은 오래된 OS에서 실행되는 오래된 OS에서와 마찬가지로 오래된 로그 메시지를 버렸습니다.
Theodor

난 그냥 CentOS는 6 상자에 내 솔루션을 확인했지만, 그것은 않습니다 내 진단을 확인,이 일을. (이전 테스트는 Ubuntu 서버에서 수행되었습니다.) EL6은 GNU grep 2.6.3과 함께 제공됩니다. 흥미롭게도 GREP_COLOR기능이 교체 되 자마자 더 이상 사용되지 않지만 (단일) 버그 도 수정했습니다 .
워렌 영

첫 번째 grep이 모든 "FAIL"을
걸러서

1

이를 위해 멀티 테일 또는 ccze를 사용할 수 있으며, 구성에서 일치하는 정규 표현식과 색상을 설명 할 수 있습니다.


1

Warren Young의 답변을 바탕으로 필자는 똑같이 우아하고 타이핑을 줄이는 Python 스크립트 를 작성 했습니다 . 그래서 이것은 당신이 그 스크립트를 사용하는 방법입니다 :

cat yourfile | himul '\[OK\]' '\[FAIL\]'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.