전체 문자열을 stdout에 전달하면서 stdin에서 특정 문자열을 쉽게 강조 표시하는 데 사용할 수있는 명령이 있습니까? 나는 그것을 구축하려고 생각하고 있지만 이미 존재하는 경우 오히려 사용하고 싶습니다. 몇 가지 바람직한 기능 :
- 별도의 강조 표시 문자열은 자동으로 다르게 강조 표시됩니다. 예를 들어, 첫 번째 문자열은 빨간색으로, 두 번째 문자열은 녹색으로, 세 번째 문자열은 수동 구성없이 파란색으로 강조 표시됩니다 .
- 색상 지원을 감지하고 가능한 경우 굵게 / 반전 / 기타 강조 표시 방법으로 넘어갑니다.
- 정규식과 리터럴 문자열을 일치시킬 수 있습니다.
- “foobar”및 “barbar”와 같이 일치 항목이 겹치는 경우 스마트 한 작업을 수행하는 것이 좋습니다.
- 색상 코드 추가를 제외하고 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
하나의 패턴에만 작동합니다. 즉, 나는 그러한 도구가 존재한다고 생각하지 않습니다.