`하이라이트`명령 특정 문자열을 쉽게 강조 표시하는

전체 문자열을 stdout에 전달하면서 stdin에서 특정 문자열을 쉽게 강조 표시하는 데 사용할 수있는 명령이 있습니까? 나는 그것을 구축하려고 생각하고 있지만 이미 존재하는 경우 오히려 사용하고 싶습니다. 몇 가지 바람직한 기능 :

  1. 별도의 강조 표시 문자열은 자동으로 다르게 강조 표시됩니다. 예를 들어, 첫 번째 문자열은 빨간색으로, 두 번째 문자열은 녹색으로, 세 번째 문자열은 수동 구성없이 파란색으로 강조 표시됩니다 .
  2. 색상 지원을 감지하고 가능한 경우 굵게 / 반전 / 기타 강조 표시 방법으로 넘어갑니다.
  3. 정규식과 리터럴 문자열을 일치시킬 수 있습니다.
  4. “foobar”및 “barbar”와 같이 일치 항목이 겹치는 경우 스마트 한 작업을 수행하는 것이 좋습니다.
  5. 색상 코드 추가를 제외하고 stdin과 stdout 사이에는 아무것도 수정되지 않습니다.


답변

아마 Radovan Garabík의 Generic Colouriser (grc) ? 구성 파일을 인수로 사용하고 regexp와 함께 작동합니다. 따라서 구성이없는 것은 아니지만 프로세스 프로세스 대체 ( <(list))를 사용할 수 있으므로 수동 구성 없이 🙂


답변

구조에 sed!

이것을 실제로 향상시킬 수는 있지만 꽤 잘 작동합니다.

$ cat >~/bin/hilight <<EOF
#!/bin/bash
while [ $# -gt 0 ]
do
 COMANDO=$COMANDO's/'$1$'/\033[01;'$2$'m\033[K\\0\033[m\033[K/g\n'
 shift;shift;
done

sed -e "$COMANDO"
EOF

간단하게하기 위해, hilight는 인수 쌍을받습니다 (먼저 일치, 두 번째 색).이 스크립트에서 속성은 항상 굵게 표시됩니다.

man console_codes (Graphic Rendition)를 읽고 색상 이스케이프 보안을 보거나 시도하십시오.

for attrib in $(seq 0 12); do
  for color in $(seq 30 37) $(seq 40 47) $(seq 90 97); do
    printf %b " $attrib $color:\033[$attrib;${color}mhi, dudes\033[m"
  done
done

이 작품을 사용할 때 중요한 단점이 있습니다.

$ dmesg | hilight \\[ 34 ] 34

그러나 이것은 전혀 아닙니다.

$ dmesg | hilight \\[ 34 ] 34 [[:digit:]] 31

[: digit :]는 이전 자살에 대한 이스케이프 시퀀스의 숫자를 찾습니다.

다음과 같은 것 :

$ cat /var/log/kern.log | hilight kernel 31 a 34 et 33

항상 예외로 작동합니다.

시간 명령을 사용하여 경과 시간이 4 씩 증가하는 것을 알았습니다.

sed 명령을 원하는 다른 파서 (awk 등)로 바꿀 수 있습니다.


답변

인쇄 할 수없는 문자의 모든 줄과 일치하는 패턴과 함께 egrep을 사용할 수도 있습니다.

dmesg | egrep --color "swap|$"


답변

clide
는 잘 작동합니다. EPEL 저장소의 RHEL 6.2에서 사용합니다.


답변

버전에 grep색상이있는 경우 정규 표현식 변경을 사용하여 grep이 텍스트를 강조 표시하고 모든 줄을 일치시켜 제외되는 부분이 없도록 할 수 있습니다. 다음은 트릭을 수행해야합니다.

<your command> |grep "highlightme\|^"


답변

링크에서 언급했듯이 grep --color=always하나의 패턴에만 작동합니다. 즉, 나는 그러한 도구가 존재한다고 생각하지 않습니다.


답변

http://em.readthedocs.org/ 사용 합니다 . Python으로 인해 다양한 플랫폼에 쉽게 설치할 수 있습니다. 간단하고 잘 작동합니다.