Làm nổi bật đầu ra tìm kiếm bảng điều khiển, trong khi hiển thị toàn bộ đầu ra lệnh


19

Khi tôi sử dụng ví dụ: cat file.txt | grep --color=tty "pattern"tôi nhận được mẫu tôi tìm kiếm được tô sáng. Khi tôi muốn có một số bối cảnh nhiều hơn xung quanh mỗi hit, grep có -A, -B-Ccác thông số.

Tuy nhiên, tôi muốn hiển thị toàn bộ tệp (hoặc bất kỳ đầu ra lệnh nào) và làm nổi bật một mẫu nhất định. Liệu một lệnh nổi bật hoặc công cụ tồn tại?


Làm thế nào là những gì bạn muốn làm bây giờ khác với những gì bạn đã làm?
Benjamin Bannier

Câu trả lời:


22

Có một câu trả lời trên unix.stackexchange.com có thủ thuật gọn gàng này:

grep -E --color 'pattern|$' file.txt

hoặc là

grep --color 'pattern\|$' file.txt

phù hợp với mẫu của bạn hoặc cuối dòng trên mỗi dòng. Chỉ có mô hình được làm nổi bật.


+1 Đơn giản và dễ dàng thích ứng với zgrep, bzgrep, v.v ... Thật tuyệt!
Stefan Lasiewski

Có cách nào để tránh gõ - màu mọi lúc không? Tôi nghĩ rằng nó khá cơ bản để nhúng tùy chọn màu vào grep, không biết tại sao chúng ta lại gõ màu rõ ràng mỗi lần. Tôi đã cố gắng tạo các tập lệnh nói rằng các tệp grepd có một bash nói grep --color $ 1 $ 2 nhưng nó không hoạt động. Mọi manh mối ở đây để khắc phục điều này xin vui lòng
Srujan Kumar Gulla

1
@lordlupine: Thêm GREP_OPTIONS='--color'vào ~/.bashrc(hoặc sửa đổi cài đặt để bao gồm --color). Bạn sẽ cần bắt đầu một thiết bị đầu cuối mới hoặc thực hiện nhiệm vụ đó tại dòng lệnh trong thiết bị đầu cuối hiện tại để nó có hiệu lực.
Tạm dừng cho đến khi có thông báo mới.

9

Tôi thích ack .

ack --passthru somepattern filename

Nó giống như grep, nhưng tốt hơn. Nó làm nổi bật theo mặc định và với --passthrutùy chọn, nó hiển thị toàn bộ tệp (hoặc đầu vào tiêu chuẩn) thay vì chỉ các dòng khớp.


1
Nếu bạn đang cố gắng chuyển đầu ra thành ack, ví dụ từ tail, thì bạn cũng cần sử dụng --filtertùy chọn này. Ví dụ:tail -f myLogFile | ack --filter --passthru pattern
sparrowt

5

Tôi cũng khuyên bạn nên sử dụng less(hoặc như vậy), nhưng tôi muốn cho bạn thấy một giải pháp thực tế hơn. Một khi bạn đã xác định chức năng này:

hàm nổi bật ()
{
    sed "s / $ 1 /` tput smso` & `tput rmso` / g" "$ {2: -}"
}

Bạn có thể sử dụng nó theo cách này:

command | highlight pattern
highlight pattern file.txt

Lưu ý: Phiên bản này là trường hợp nhạy cảm, để thay đổi điều đó chỉ phụ thêm isau gtrong sedbiểu thức.


1
Tôi sẽ gọi tputthay vì mã hóa các giá trị. Bằng cách này bạn cũng tránh sử dụng echo -e, có thể có tác dụng khác.
Ignacio Vazquez-Abrams

Bạn hoàn toàn đúng, tôi đã tìm kiếm nó không có may mắn. Cảm ơn.
cYrus

Phiên bản này không cần dấu ngoặc đơn và có thể được chạy bằng prog | highlight "pattern"hoặc highlight "pattern" file:highlight () { local file=${2:--}; sed "s/$1/$(tput smso)&$(tput rmso)/gi" "$file"; }
Tạm dừng cho đến khi có thông báo mới.

sedKỹ năng của tôi về cơ bản là không tồn tại. Làm thế nào tôi phải thay đổi điều đó để phù hợp với trường hợp mẫu nhạy cảm. Dù sao, tôi sẽ thêm cái đó vào bash_fifts của tôi bao gồm. Cảm ơn rât nhiều.
DerMike

@DerMike: Bây giờ là trường hợp nhạy cảm.
cYrus

3

Chuyển -Cđến grepvới một giá trị đủ cao sẽ làm điều này.


Tôi có thể đã thề rằng tôi đã có một số thứ khác lần trước khi tôi đã thử nó. (Mỗi kết hợp bối cảnh với dấu phân cách '-----' ở giữa.) Bây giờ bạn đã nói với tôi, nó chạy tốt :-) Cảm ơn bạn.
DerMike

Nó sẽ phân tách từng trận đấu, nếu không có đủ bối cảnh.
Ignacio Vazquez-Abrams

3

less là mô hình nổi bật, vì vậy

less -p 'mypattern' file.txt

hoặc là

ridiculously | long | pipe | less

và sau đó ít hơn /để tìm kiếm một mẫu sẽ được làm nổi bật.

Lưu ý bên:

Bạn có thể cải thiện lệnh của mình, ví dụ
đặt bí danh alias grep="grep --color=tty"và sử dụng nó như thế:

grep 'mypattern' file.txt;

1
bạn không nên sử dụng GREP_OPTIONS, thay vào đó hãy sử dụng bí danh. xem: bugs.launchpad.net/ubuntu/+bug/67141
lesmana

Tối ưu không nocere. loại bỏ.
thường

GREP_OPTIONS được sử dụng bởi nhiều dạng grep(zgrep, bzgrep, bzfgrep, v.v.) Vì vậy, nếu bạn muốn tất cả các dạng grep hoạt động nhất quán, bạn cần đặt bí danh cho từng dạng grep. Câu trả lời mới của @ Casual ở trên sẽ không dành cho điều gì đó như bzgrep pattern /var/log/messages.?.gz, đó là một ví dụ trong đó việc làm nổi bật màu sắc RẤT hữu ích.
Stefan Lasiewski

1

Có một đẹp supercat công cụ, phục vụ chính xác mục đích đó. Nó có thể tô màu đầu ra giao diện điều khiển của bạn và tạo ra một html "được tô sáng" từ đầu vào của bạn.


Cảm ơn, điều đó có vẻ hứa hẹn. Tuy nhiên, tôi dường như không thể làm cho nó hoạt động vào lúc này.
DerMike

1
Hãy xem các tệp cấu hình của nó (trong /etc/supercatUbuntu), thiết lập các quy tắc tô màu, về cơ bản chúng là các cặp màu / regrec (với một số quy tắc bổ sung); trang người đàn ông cũng ngắn và tốt đẹp.
Ivan Tarasov

Tôi tìm thấy spcrctệp cú pháp vim tại vim.org/scripts/script.php?script_id=2676
DerMike
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.