grep trang man của một lệnh cho các tùy chọn gạch nối


8

Khi tôi grep trang man của findlệnh để khớp với typenó sẽ trả về rất nhiều kết quả tìm kiếm mà tôi không muốn. Thay vào đó tôi muốn sử dụng một lệnh rằng lợi nhuận chỉ các kết quả tìm kiếm -type.

Lệnh man find | grep -typekhông hoạt động. Nó trở lại:

grep: invalid option -- 't'

1
Bạn có muốn chỉ các dòng riêng lẻ của trang man được định dạng có chứa chuỗi -typehoặc bạn muốn nói toàn bộ đoạn hoặc hai mô tả những gì -typekhông?
Đánh dấu Plotnick

Tôi muốn biết cách thực hiện cả hai cách, grepping cho các dòng riêng lẻ chứa chuỗi -typesẽ đủ cho cách tôi thường tìm kiếm các trang man, tuy nhiên trả lại toàn bộ hoặc hai đoạn mô tả những gì -typesẽ rất hữu ích để làm ít nhất một lần
karel

BTW, nếu xem một trang web là một giải pháp thay thế, Idan Kamara tại notifyshell.com đã thực hiện một công việc tuyệt vời là trích xuất các phần của các trang man mô tả các tùy chọn lệnh. Xem, ví dụ, giải thíchshell.com/explain?cmd=find+-type+f để xem -typetùy chọn này làm gì.
Đánh dấu Plotnick

Câu trả lời:


10

Nếu bạn muốn grep cho một mẫu bắt đầu bằng dấu gạch nối, hãy sử dụng --trước mẫu bạn chỉ định.

man find | grep -- -type

Nếu bạn muốn biết thêm thông tin, ví dụ như toàn bộ phần mô tả một tùy chọn, bạn có thể thử sử dụng Sed:

$ man find | sed -n '/-mindepth/,/^$/p'
   -mindepth levels
          Do  not apply any tests or actions at levels less than levels (a
          non-negative integer).  -mindepth  1  means  process  all  files
          except the command line arguments.

Tuy nhiên, điều này sẽ không hoạt động cho mọi tùy chọn bạn có thể tìm kiếm. Ví dụ:

$ man find | sed -n '/^[[:space:]]*-type/,/^$/p'
   -type c
          File is of type c:

Không hữu ích lắm. Tồi tệ hơn, đối với một số tùy chọn, bạn có thể bị lầm tưởng rằng bạn đã đọc toàn bộ văn bản về tùy chọn khi bạn thực sự không có. Ví dụ: tìm kiếm -deletebỏ qua CẢNH BÁO rất quan trọng có trong đoạn thứ hai dưới tiêu đề đó.


Đề nghị của tôi là sử dụng một cuộc gọi tiêu chuẩn manvới bộ LESSbiến môi trường. Tôi sử dụng nó khá phổ biến trong câu trả lời của tôi trên trang web này.

LESS='+/^[[:space:]]*-type' man find

Để tìm hiểu thêm về cách thức này hoạt động, xem:

LESS='+/^[[:space:]]*LESS ' man less
LESS='+/\+cmd' man less
LESS='+/\/' man less

Nếu bạn chỉ muốn tìm tùy chọn nhanh chóng và tương tác trong trang man, hãy tìm hiểu cách sử dụng lesscác khả năng tìm kiếm. Và cũng thấy:


Cảm ơn đã đăng bài viết. Các lệnh trong câu trả lời của bạn trả về kết quả mà tôi đang tìm kiếm. Tôi sẽ chấp nhận một câu trả lời sau một hoặc hai ngày, vì vậy hãy kiên nhẫn.
karel

@karel, không vấn đề gì, tôi rất kiên nhẫn. :) Tuy nhiên, có một chút bối rối: Tôi biết bạn không thể bắt đầu trả tiền cho một câu hỏi trong hai ngày, nhưng tôi tin rằng giới hạn thời gian trước khi bạn có thể chấp nhận câu trả lời chỉ là 15 phút.
tự đại diện

man find | sed -n '/-type/,/^$/p'cung cấp cho rất nhiều nhiều hơn những gì bạn được đăng vì nó sẽ phù hợp với -typebất cứ nơi nào trong dòng ... đang làm việc trên kịch bản nhỏ bản thân mình để tìm kiếm người đàn ông hay giúp đỡ (ví BUILTIN) và hiện đang sử dụng awkmà vẫn có vài quirks để giải quyết .. awk -v RS= -v rx="^\\\s*$arg\\\>" '$0 ~ rx' "$file"nơi argsẽ là -typetrong này trường hợp
Sundeep

2
BTW, @Sundeep, bạn có thể muốn thử phân tích cú pháp các trofftệp bên dưới có chứa thông tin trang gốc với thông tin định dạng, thay vì đầu ra văn bản của manlệnh.
tự đại diện

1
@Sundeep, đây là điểm khởi đầu cho bạn . (Hãy chắc chắn theo liên kết trong câu trả lời đó.) Có rất nhiều điều cần biết troff. Ping tôi trong trò chuyện khi bạn hoàn thành việc lặn xuống hố thỏ. :)
tự đại diện

1

Hoặc dẫn đến lessvà cung cấp thuật ngữ tìm kiếm:

man 1 find | less -p ' -type'

(Điều này có thể thất bại tùy thuộc vào chính xác lessnguồn cấp dữ liệu là gì , ví dụ: nếu -typeđã được in đậm bằng các khoảng trống.)


Ống nó qua col -bxđầu tiên.
tự đại diện
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.