Điều gì ít làm với vòng / phút và làm cách nào để có được văn bản đó mà không có vòng / phút


12

Khi tôi thực thi less package.rpm, ít hiển thị cho tôi tất cả các loại thông tin meta về gói. Điều gì ít chính xác hơn - nó đã được xây dựng trong mã để có thể trích xuất thông tin meta hay là một vòng / phút được cấu trúc theo cách mà phần đầu tiên trông giống như một tệp văn bản?

Tôi sẽ giả sử trước đây, vì headkhông hữu ích ở đây. Nhưng để đi đến câu hỏi thực sự : Nếu tôi muốn grepthông qua dữ liệu meta này ít hiển thị cho tôi, làm thế nào tôi có thể thực hiện được điều này?

Câu trả lời:


23

Nếu bạn duyệt qua lesstrang man, bạn sẽ thấy lesscó tính năng INPUT PREPROCESSOR.

echo $LESSOPENđể xem vị trí của bộ tiền xử lý này và sử dụng less/ vim/ catđể xem nội dung của nó.

Trên máy của tôi, bộ tiền xử lý này /usr/bin/lesspipe.shvà nó bao gồm các phần sau cho rpms:

*.rpm) rpm -qpivl --changelog -- "$1"; handle_exit_status $?

Trong thực tế, hãy lessmở tệp ra rpmvà hiển thị cho bạn phân trang đầu ra của nó.

Rõ ràng, để grep qua thông tin này, chỉ cần grep trực tiếp đầu ra của vòng / phút:

grep "foo" < <(rpm -qpivl --changelog -- bar.rpm)

Hoặc nói chung (cảm ơn OrangeDog)

grep "foo" < <(lesspipe.sh bar.rpm)

Lưu ý: $LESSOPEN Không chỉ đơn giản là giữ vị trí của lesspipe.sh- nó bắt đầu bằng một |và kết thúc bằng việc %sgọi nó trực tiếp sẽ dẫn đến lỗi.


1
Tại sao không grep "foo" < <($LESSOPEN bar.rpm)? Hoặc thậm chí có thể chỉ $LESSOPEN bar.rpm | grep "foo".
jpmc26

4

Nếu tôi muốn grep qua dữ liệu meta này ít hiển thị cho tôi, làm thế nào tôi có thể thực hiện điều này?

rất đơn giản; nếu bạn muốn grep trên "Phiên bản" chẳng hạn:

less your.rpm | grep "Version"

Lưu ý rằng ít sử dụng rpmlệnh; vì vậy tốt hơn bỏ qua sử dụng ít hơn; và sử dụng rpmcác lệnh; giống:

rpm -qip /path/to/uninstalled/rpm
rpm -qi installed.rpm
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.