Làm thế nào tôi có thể làm cho grep tôn trọng màu sắc trên một đường ống?


7

Trong hệ vỏ Linux hiện đại, rất nhiều lệnh (như ls ) có thể xuất văn bản màu.

Nếu bạn đặt nó với các lệnh khác, bạn sẽ mất màu. Ví dụ:

$ ls path
[... folders in blue, executables in green,..etc ]

$ ls path | grep foo
[... all in black and white]

Làm thế nào tôi có thể làm grep trên phần thứ hai của đường ống tôn trọng ls màu sắc (hoặc bất kỳ lệnh nào khác được thực thi)?

Câu trả lời:


8

Bạn có thể nói ls để luôn luôn tô màu đầu ra, kể từ khi nó ghi vào một đường ống với --color=auto Nó không thêm màu.

Nếu bạn làm ls --color=always path | grep --color=never foo nó sẽ làm cho ls thêm màu sắc, và ngăn chặn grep từ thay thế bằng màu sắc riêng của nó.


tiếc là nó không hoạt động với git branch | grep --color=never -v trash
Sridhar-Sarnobat

1
@ Sridhar-Sarnobat git branch --color=always | grep --color=never -v trash làm việc cho tôi, nếu nó không dành cho bạn xin vui lòng hỏi một câu hỏi mới
Eric Renouf

Cảm ơn bạn rất nhiều. Có nó hoạt động. Nó tốt hơn so với cách giải quyết khủng khiếp mà tôi đã sử dụng git branch --sort=-committerdate | grep -v trash | perl -pe 's{^\*(.*)}{*\033[32m$1 \033[0m}g' (cố gắng gán với zsh's bindkey là một cơn ác mộng với tất cả các dấu nháy đơn).
Sridhar-Sarnobat

1

Cả hai lệnh đều có --color=always tranh luận.

$ ls --color=always | grep e

1
Giải pháp Eric được hoàn thiện hơn. Tôi cần --color = không bao giờ trên lệnh grep để làm việc.
Zhen

Bất cứ ai cũng biết nơi / làm thế nào hương vị tự động được thực hiện? Nó không chỉ là một tính năng shell, được tích hợp trong một số thư viện mà tất cả chúng đều sử dụng cho màu sắc. Có cách nào để thay đổi cách tự động phân loại kênh đầu ra không? Sẽ rất tốt để tùy chỉnh nó, nhưng có lẽ bạn phải thay đổi một cái gì đó sâu trong thư viện để làm điều đó. Sau đó sẽ mất một lúc trước khi hỗ trợ lan truyền đến tất cả các công cụ và phân phối.
Gerry Gleason

@GerryGl Lý do tìm nguồn ls có vẻ như tất cả được tích hợp ngay trong nó, không phải trong thư viện. Đây không phải là một tính năng hệ vỏ, nó dường như không phải là một thư viện phổ biến cho coreutils hoặc bất cứ thứ gì tương tự. Tôi đoán rằng mỗi ứng dụng đang tự xây dựng nó, ít nhất là tìm kiếm trong coreutils-8.24
Eric Renouf

Tôi có nginx -V |grep --color=always sslssl không được tô màu trong đầu ra. Làm thế nào tôi có thể làm điều đó?
Timo
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.