Làm thế nào để tìm kiếm một mẫu có chứa dấu gạch nối trong trang man?


11

Tôi đang cố gắng tìm một lệnh để tìm kiếm một mẫu có chứa dấu gạch nối bên trong tất cả các trang man.

Tôi đã xem man manvà tìm thấy 3 tùy chọn sau:

-K, --global-apropos

Tìm kiếm văn bản trong tất cả các trang hướng dẫn. Đây là một tìm kiếm vũ phu, và có thể sẽ mất một thời gian; nếu có thể, bạn nên chỉ định một phần để giảm số lượng trang cần tìm kiếm. Thuật ngữ tìm kiếm có thể là các chuỗi đơn giản (mặc định) hoặc biểu thức chính quy nếu --regextùy chọn được sử dụng.

-w, --where, --path,--location

Không thực sự hiển thị các trang thủ công, nhưng hãy in (các) vị trí của các tệp nroff nguồn sẽ được định dạng.

-S list, -s list,t--sections=list

Danh sách là danh sách các phần thủ công cụ thể theo thứ tự hoặc được phân tách bằng dấu phẩy để tìm kiếm. Tùy chọn này ghi đè $MANSECTbiến môi trường. (Chính -stả là để tương thích với Hệ thống V.)

Tôi đã cố gắng kết hợp chúng để tìm kiếm mẫu mark-modified-linestùy chọn đọc được mô tả trong man bash:

$ man -s1 -Kw mark-modified-lines

Nhưng nó không tìm thấy bất kỳ trang nào:

No manual entry for mark-modified-lines

Và lệnh thoát với mã 16.
Tôi nghĩ rằng có thể cú pháp của lệnh là sai, nhưng có vẻ như không phải vậy, vì lệnh này tìm đúng 5 trang man trên hệ thống của tôi có chứa từ guitar:

$ man -s1 -Kw guitar

  /usr/share/man/man1/ffmpeg-all.1.gz
  /usr/share/man/man1/ffserver-all.1.gz
  /usr/share/man/man1/ffplay-all.1.gz
  /usr/share/man/man1/ffmpeg-filters.1.gz
  /usr/share/man/man1/ffprobe-all.1.gz

Tôi nghĩ rằng có lẽ các dấu gạch nối trong từ gây ra một vấn đề. Trong man bash, tôi tìm thấy --regextùy chọn được mô tả như sau:

--regex

Hiển thị tất cả các trang với bất kỳ phần nào trong tên của chúng hoặc mô tả của chúng khớp với từng đối số trang như một biểu thức chính quy, như với apropos(1). Vì thường không có cách hợp lý để chọn trang "tốt nhất" khi tìm kiếm biểu thức chính quy, tùy chọn này ngụ ý -a.

Tôi đã cố gắng sử dụng tùy chọn này và thay thế từ này mark-modified-linesbằng regex mark.modified.lines, trong đó các dấu gạch nối được thay thế bằng metacharacter .phù hợp với bất kỳ ký tự nào:

$ man -s1 -Kw --regex 'mark.modified.lines'

Nó vẫn không in bất kỳ trang nào, trong khi tôi biết rằng văn bản được viết trong bashtrang man.

Các metacharacter .trong regex dường như được phân tích cú pháp như mong đợi, vì lệnh này:

$ man -s1 -Kw --regex 'mark.mo'

Bản in:

  /usr/share/man/man1/x11perfcomp.1.gz
  /usr/share/man/man1/xditview.1.gz

Và 2 trang này ( x11perfcomp, xditview) đều được khớp bởi biểu thức chính quy mark.mo. Cụ thể hơn, man x11perfcompchứa dòng này:

Mark Moraes wrote the original scripts to compare servers.
^^^^^^^

man xditviewchứa dòng này:

    Mark Moraes (University of Toronto)
    ^^^^^^^

Tuy nhiên, man -s1 -Kw --regex 'mark.mo'không in trang bash man:

/usr/share/man/man1/bash.1.gz

Trong khi tôi mong đợi nó sẽ, vì nó chứa dòng này:

mark-modified-lines (Off)
^^^^^^^

Có thể tìm kiếm một mẫu có chứa dấu gạch nối bên trong các trang man?

Câu trả lời:


15

man -Ktìm kiếm mã nguồn của các trang thủ công, không phải dạng kết xuất của chúng (như được hiển thị bởi man). Các dấu gạch ngang được mã hóa \-, vì vậy bạn cần tìm kiếm:

man -s1 -Kw 'mark\-mo'

Vâng, điều này khá tối nghĩa. Các mantrang người đàn ông đề cập, trong mô tả của các -Ktùy chọn, mà

Lưu ý rằng điều này tìm kiếm các nguồn của các trang thủ công, không phải văn bản được hiển thị và do đó có thể bao gồm các thông báo sai do những thứ như nhận xét trong các tệp nguồn. Tìm kiếm văn bản kết xuất sẽ chậm hơn nhiều.

nhưng sử dụng chính xác điều này liên quan đến việc biết đại diện nguồn của văn bản bạn đang tìm kiếm.


1
Tối nghĩa? Đúng. Ngoài ra, đó là một lỗi.
kubanchot

@kubanchot tốt, nó phù hợp với thông số kỹ thuật, nhưng vâng, tôi đồng ý rằng thông số đó là lỗi ;-).
Stephen Kitt
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.