Nhận kết quả màu khi sử dụng đường ống từ grep đến ít hơn


246

Tôi sử dụng tùy chọn - màu của grep rất nhiều, nhưng tôi cũng thường sử dụng ít hơn. Làm thế nào tôi có thể dẫn kết quả grep xuống ít hơn mà vẫn giữ được màu. (Hoặc là có thể?)

grep "search-string" -R * --colour | less 

CHỈNH SỬA :

Tôi đang tìm kiếm một giải pháp trực tiếp hoặc bất cứ điều gì tương đương với điều này.



Không gì *làm gì? Từ trang người đàn ông của grep: *: The preceding item will be matched zero or more times.Nhưng tôi vẫn không hiểu ..! @JeremyPowell
Shayan

Câu trả lời:


274

Khi bạn chỉ đơn giản chạy grep --colornó ngụ ý grep --color=autosẽ phát hiện xem đầu ra có phải là thiết bị đầu cuối hay không và nếu có cho phép màu sắc hay không. Tuy nhiên, khi phát hiện ra một đường ống, nó sẽ vô hiệu hóa màu. Lệnh sau:

grep --color=always -R "search string" * | less

Sẽ luôn bật màu và ghi đè phát hiện tự động, và bạn sẽ có được tô sáng màu less.

EDIT: Mặc dù chỉ sử dụng lesscho tôi, nhưng có lẽ phiên bản cũ hơn yêu cầu -Rcờ xử lý màu sắc, như đã đề xuất.


143
Bạn cần sử dụng less -Rđể mã hóa màu được giải thích ít chính xác hơn
từ đó

1
Nó chỉ làm việc với tôi less, nó có thể phụ thuộc vào phiên bản.
drrlvn

1
Một phụ lục hữu ích (hy vọng): Tôi cần loại trừ một số trận đấu nhưng vẫn duy trì màu sắc, vì vậy tôi thực sự đã kết thúc grep pattern file | grep -v badpattern | grep --colour=always pattern | less -R, đáp ứng hoàn hảo nhu cầu của tôi. (Cảm ơn một lần nữa!)
Owen Blacker

7
Tôi không thể tin rằng họ chỉ thực hiện tính năng xử lý màu sắc lessvà do đó bỏ lỡ cơ hội có một colorlesscông cụ đặc biệt . Đối với tên một mình nó nên được thực hiện! Tôi có lẽ nên viết một bản vá tự động gọi -R khi nhị phân được chạy dưới dạng colorless.
Christian

2
@OwenBlacker Nó có thể không phải là bí danh. Bạn có thể đã $LESSthiết lập với -R.
greyfade

27

Bạn có thể đặt cái này trong .bashrctập tin của bạn :

export GREP_OPTIONS="--color=always"

hoặc tạo một bí danh như thế này:

alias grepc="grep --color=always"

và bạn sẽ cần phải sử dụng -Rtùy chọn cho less, như được chỉ ra từ đó


29
Cảnh báo!: GREP_OPTIONS = "- color = always" có thể phá vỡ nhiều tập lệnh sử dụng grep (hoặc (e | f) grep).
mctylr

4
Vâng, tốt hơn là chỉ bí danh grep. Bạn luôn có thể nhận được thuần túy grepvới GREPhoặc ghi đè --colortùy chọn theo cách thủ công.
asmeker

Điều này không làm việc cho tôi, mặc dù bí danh làm việc.
saeedgnu

9

Trong trường hợp như thế này, tôi thích thực sự tạo các tệp sh nhỏ và đặt chúng vào /usr/local/bin.
Tôi thường sử dụng greptheo cách đệ quy trên pwd, vì vậy đó là kịch bản cá nhân của tôi:

#!/bin/sh
grep --color=always -r "$@" . | less -R

Và sau đó tôi đã sao chép nó thành /usr/local/bin/g(vâng, tôi sử dụng nó rất nhiều)


2
Tại sao không chỉ sử dụng các hàm shell cho loại điều này? g() { grep --color=always -r "$@" . | less -R }hoạt động giống hệt nhau và có thể sẽ cung cấp (tối thiểu) hiệu suất tốt hơn.
00dani

1
@ 00dani yeah, đó cũng là một lựa chọn hợp lệ và đôi khi tôi sử dụng nó. Xin lưu ý rằng trong trường hợp này, phần lớn thời gian dành cho IO và do đó không có hiệu suất tăng đáng kể :) Một điểm khác biệt là một lần trong PATH của bạn, tập lệnh này cũng có thể được sử dụng với các tập lệnh shell và bí danh khác; thay vào đó, chức năng cần phải được tải rõ ràng
Iazel

1

Đừng bí danh "grep", tốt hơn là bí danh "ít" không bao giờ được sử dụng bởi shell. Trong của bạn .bashrcchỉ cần đặt : alias less="less -r".


3
Không hoàn toàn đúng. Một nhu cầu sử dụng cả grep --color=alwaysless -R. Lưu ý rằng grep chỉ biết rằng nó đang được đưa vào một số quy trình khác và --color=autotùy chọn chỉ sử dụng thông tin này để quyết định xem có xuất màu hay không.
brandizzi

3
Lưu ý rằng lesstùy chọn -rlà khác nhau -R. Có lẽ -Rlà an toàn hơn.
Craig McQueen

1
Vì vậy, tại sao bỏ phiếu giải pháp của tôi. OP đặc biệt yêu cầu lessvới ví dụ đã sử dụng tùy chọn '--color'.
not2qubit

3
Một bí danh có lẽ là không mong muốn ở đây. lesshỗ trợ một $LESSbiến môi trường. Vì vậy, thay vì bí danh, export LESS='-R'có thể tốt hơn.
greyfade

0

Tôi cần chạy

grep --color=always -R "search string" * | less - r

với cờ -r sau ít hơn , để chạy này.


Không gì *làm gì? Từ trang người đàn ông của grep: *: The preceding item will be matched zero or more times.Nhưng tôi vẫn không hiểu ..!
Shaya
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.