!['하이라이트' 명령](https://linux55.com/image/16566/'%ED%95%98%EC%9D%B4%EB%9D%BC%EC%9D%B4%ED%8A%B8'%20%EB%AA%85%EB%A0%B9.png)
전체 문자열을 stdout에 전달하는 동안 stdin의 특정 문자열을 쉽게 강조 표시(색상, 굵은 텍스트 또는 반전된 배경/전경 사용)하는 데 사용할 수 있는 명령이 있습니까? 나는 생각 중입니다그것을 구축, 하지만 이미 존재한다면 사용하고 싶습니다. 몇 가지 바람직한 기능:
- 개별 강조표시된 문자열은 자동 방식으로 다르게 강조표시됩니다. 예를 들어 첫 번째 문자열은 빨간색으로, 두 번째 문자열은 녹색, 세 번째 문자열은 파란색으로 강조 표시됩니다.수동 구성이 필요하지 않습니다..
- 색상 지원을 감지하고 굵게/반전/기타 사용 가능한 강조 표시 방법으로 대체합니다.
- 정규식과 리터럴 문자열의 일치를 허용합니다.
- 일치 항목이 겹치는 경우 "foobar" 및 "barbar"와 같은 영리한 작업을 수행하는 것이 좋습니다.
- 색상 코드를 추가하는 것 외에 stdin과 stdout 사이에는 수정 사항이 없습니다.
답변1
세드가 구하러 온다!
(정말로 필요하기 때문에) 개선할 수 있지만 훌륭하게 작동합니다.
$ 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
예외적으로 항상 작동합니다.
time 명령을 사용하여 경과 시간이 4배 증가한 것을 발견했는데, 이는 그리 많지 않은 수치입니다.
sed 명령을 원하는 다른 파서(awk 등)로 바꿀 수 있습니다.
답변2
아마도Radovan Garabík의 범용 토너(grc)? 구성 파일을 매개변수로 사용하고 정규식과 함께 작동합니다. 그래서 꼭 설정이 없는 것은 아니지만 프로세스 프로세스 대체( <(list)
)를 사용할 수 있으므로 어차피 필요하지 않습니다.수동구성:-)
답변3
인쇄할 수 없는 문자의 모든 줄과 일치하는 패턴과 함께 egrep을 사용할 수도 있습니다. 예를 들면 다음과 같습니다.
dmesg | egrep --color "swap|$"
답변4
클라이드 잘 달리고 있어요. EPEL 저장소의 RHEL 6.2에서 이것을 사용하고 있습니다.