lệnh `highlight`


11

Có một lệnh có thể được sử dụng để dễ dàng làm nổi bật (với màu sắc, văn bản in đậm hoặc ngược lại chuỗi / / foreground) trong stdin trong khi chuyển toàn bộ chuỗi sang thiết bị xuất chuẩn không? Tôi đang nghĩ đến việc xây dựng nó , nhưng tôi chỉ muốn sử dụng nó nếu nó đã tồn tại. Một số tính năng mong muốn:

  1. Các chuỗi nổi bật riêng biệt được làm nổi bật khác nhau, theo cách tự động. Ví dụ, chuỗi đầu tiên sẽ được tô sáng màu đỏ, chuỗi thứ hai màu xanh lục, chuỗi thứ ba màu xanh lam mà không cần cấu hình thủ công .
  2. Phát hiện hỗ trợ màu sắc và quay lại các phương pháp tô đậm / đảo ngược / tô sáng khác khi có sẵn.
  3. Cho phép kết hợp các biểu thức chính quy và chuỗi ký tự.
  4. Tốt nhất là làm một cái gì đó thông minh nếu các trận đấu trùng nhau, chẳng hạn như "foobar" và "barbar".
  5. Không có gì được sửa đổi giữa stdin và stdout ngoại trừ việc thêm mã màu.


Ôi, câu hỏi hay. Tôi cần điều chính xác này và cuối cùng đã viết một cái gì đó, nhưng nó chỉ là các chuỗi cố định được mã hóa màu, nó không có bất kỳ tính năng nào bạn liệt kê
Michael Mrozek

Thay vì viết một tiện ích mới, sẽ thật tuyệt vời khi xem đây là một bổ sung cho chính grep.
mattdm

1
Triết lý unix đúng sẽ là một tiện ích mới có thể được truyền qua từ không chỉ grep mà cả các luồng khác. Tôi nghi ngờ có ít nhất một hoặc nhiều mô-đun Perl có thể làm điều này cho bạn, mặc dù ...
Shadur

1
@Gilles: Câu hỏi đó hạn chế hơn nhiều về phạm vi. Trong thực tế, đọc nó là một trong những lý do tôi tạo ra câu hỏi này - Để yêu cầu một giải pháp tổng quát và linh hoạt hơn.
l0b0

Câu trả lời:


4

Có lẽ là Colouriser (grc) chung của Radovan Garabík ? Nó mong đợi một tập tin cấu hình như là đối số và hoạt động với regrec. Vì vậy, không hoàn toàn mà không cần cấu hình, nhưng bạn có thể sử dụng thay thế tiến trình quá trình ( <(list)), vì vậy bằng mọi cách mà không thủ công cấu hình :-)


Để làm rõ mà không cần phải mở trang (và để làm cho nó có thể tìm kiếm được), "cái này" == Colouriser chung ; GRCgrcat ... Cảm ơn, tôi thích nó.
Peter.O

grccó một kịch bản trợ giúp : grcat. Dưới đây là một ví dụ về tô màu tất cả các chữ in hoa màu đỏ. Bước 1: Thiết lập tập tin cấu hình: printf "regexp=[A-Z]\ncolours=red\n" > ~/.grc/red-caps Bước 2; Sử dụng nó: echo Hello World | grcat red-caps... Trang man nêu 3 thư mục cấu hình mà nó tìm kiếm và sau đó gợi ý (?) Rằng tệp cấu hình có thể là một đường dẫn tuyệt đối, nhưng phương pháp tìm tệp cấu hình cuối cùng này chỉ hoạt động với các đường dẫn tương đối đối với tôi (grc phiên bản 1.3)
Peter.O

5

Sed để giải cứu!

Bạn có thể cải thiện điều này (vì nó thực sự cần nó) nhưng nó hoạt động khá tốt.

$ 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

Để đơn giản, hilight chấp nhận cặp đối số (đầu tiên là trận đấu, thứ hai là màu sắc) Trong kịch bản này, attrib luôn được in đậm

Đọc man console_codes (Kết xuất đồ họa) để xem các khoảng cách thoát màu hoặc thử cái này

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

Nó có nhược điểm quan trọng khi sử dụng tác phẩm này:

$ dmesg | hilight \\[ 34 ] 34

nhưng điều này hoàn toàn không:

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

bởi vì [: chữ số:] tìm thấy các số trong các khoảng thoát trên các lần duy trì trước đó.

Cái gì đó như:

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

sẽ luôn luôn làm việc như bị loại trừ.

Sử dụng lệnh thời gian tôi thấy số gia này tăng thêm bốn lần, không quá nhiều.

Bạn có thể thay thế lệnh sed bằng bất kỳ trình phân tích cú pháp nào khác mà bạn thích hoặc phù hợp với nhu cầu của bạn (awk, v.v ...)


2

Người ta cũng có thể sử dụng egrep với mẫu khớp với mọi dòng trên ký tự không in được, như:

dmesg | egrep --color "swap|$"

1

clide hoạt động tốt. Tôi sử dụng nó trên RHEL 6.2, từ kho EPEL


+1 cho một công cụ rất hay. Thật không may, nó không có tất cả các tính năng được yêu cầu.
l0b0

1

Nếu phiên bản của bạn grepđi kèm với màu sắc, thì bạn có thể sử dụng thay đổi regrec để làm cho grep làm nổi bật văn bản và cũng khớp với mọi dòng để không có gì bị loại trừ. Sau đây nên làm thủ thuật:

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

0

Như bạn đã đề cập trong liên kết, grep --color=alwayschỉ hoạt động cho một mẫu. Điều đó nói rằng, tôi không tin rằng một công cụ như vậy tồn tại.


0

Tôi sử dụng http://em.readthedocs.org/ . Dễ dàng cài đặt trên các nền tảng khác nhau vì Python. Đơn giản và hoạt động tốt.


Chào mừng bạn đến với Sàn giao dịch Unix & Linux! Trong khi điều này về mặt lý thuyết có thể trả lời câu hỏi, tốt hơn là nên bao gồm các phần thiết yếu của câu trả lời ở đây, và cung cấp liên kết để tham khảo.
slm

1
Theo trung tâm trợ giúp : Tuy nhiên, bạn phải tiết lộ sự liên kết của mình trong câu trả lời của bạn. Trong trường hợp bạn là cùng một Igor Kalnitsky đã viết em, vui lòng điều chỉnh lại câu trả lời của bạn để rõ ràng rằng bạn không phải là người dùng, mà là tác giả của công cụ được đề xuất.
manatwork
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.