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


18

Giả sử tôi muốn biết cách sử dụng -ichuyển đổi trong greplệnh mà không cần cuộn. Tôi cần thông số kỹ thuật chỉ cho lệnh đó hoặc ít nhất là xem màn hình hiển thị đầu tiên. Vậy làm thế nào? Như bạn có thể nói rằng nói chung không chỉ cho grep -i.


Câu trả lời:


14

Hãy thử sedlệnh đơn giản này ,

$ man grep | sed -n '/-i, --ignore-case/,+2p'
    -i, --ignore-case
              Ignore  case  distinctions  in  both  the  PATTERN and the input
              files.  (-i is specified by POSIX.)

Giải trình:

sed -n '/-i, --ignore-case/,+2p'

        |<-Search pattern->|

Nó sẽ in dòng chứa mẫu tìm kiếm cùng với 2 dòng xuất hiện ngay bên dưới dòng mẫu tìm kiếm.

HOẶC LÀ

Bạn chỉ có thể cung cấp chỉ các cờ trong patten tìm kiếm như dưới đây.

avinash@avinash-Lenovo-IdeaPad-Z500:~$ man grep | sed -n '/ *i, -/,+3p'
       -i, --ignore-case
              Ignore  case  distinctions  in  both  the  PATTERN and the input
              files.  (-i is specified by POSIX.)

avinash@avinash-Lenovo-IdeaPad-Z500:~$ man grep | sed -n '/ *V, -/,+3p'
       -V, --version
              Print  the version number of grep to the standard output stream.
              This version number should be included in all bug  reports  (see
              below).
avinash@avinash-Lenovo-IdeaPad-Z500:~$ man grep | sed -n '/ *F, -/,+3p'
       -F, --fixed-strings
              Interpret PATTERN as a  list  of  fixed  strings,  separated  by
              newlines,  any  of  which is to be matched.  (-F is specified by
              POSIX.)
avinash@avinash-Lenovo-IdeaPad-Z500:~$ man grep | sed -n '/ *G, -/,+3p'
       -G, --basic-regexp
              Interpret PATTERN  as  a  basic  regular  expression  (BRE,  see
              below).  This is the default.

Bạn có thể thêm tập lệnh này vào .bashrc( $HOME/.bashrc) để truy cập nhanh:

mangrep(){
    USAGE="mangrep <application> <switch>"
    if [[ "$#" -ne "2" ]]
      then
          echo "Usage: $USAGE"
      else
          man "$1" | sed -n "/ *"$2", -/,+3p"
    fi
}

23

Nhập lệnh dưới đây trên thiết bị đầu cuối:

man grep

Sau đó nhập ký tự gạch chéo /, và viết tìm kiếm của bạn, như -i, theo sau Enter. Điều này sẽ định vị con trỏ ở lần xuất hiện đầu tiên của chuỗi tìm kiếm. Nhấn ndi chuyển con trỏ đến lần xuất hiện tiếp theo. Nhấn Shift+ ndi chuyển con trỏ đến lần xuất hiện trước.


1
Nó sẽ định vị tất cả các trang -i. man grepNhưng OP chỉ muốn mô tả liên quan đến -icờ trong trang man.
Avinash Raj

3
@AvinashRaj không, nó sẽ cho phép bạn quay vòng qua mỗi lần xuất hiện -i. Đó chính xác là những gì OP muốn.
terdon

9

Mặc dù cách tiếp cận đơn giản nhất là tìm kiếm /theo đề xuất của @girardengo, bạn cũng có thể sử dụng grepthay vì sedtôi thấy đơn giản hơn:

$ man grep | grep -A 1 '^ *-i'
   -i, --ignore-case
          Ignore  case  distinctions  in  both  the  PATTERN and the input
          files.  (-i is specified by POSIX.)

-A Nnghĩa là "In N dòng sau khi khớp dòng. Chỉ là một mẹo để có được vài dòng tiếp theo, tương tự như cách tiếp cận của Avinash sed .


3

Bạn có thể sử dụng chức năng tìm kiếm bên trong man, chỉ cần đặt trước "s", nhập khóa bạn đang tìm, (-i trong trường hợp của bạn) và nhấn giới thiệu.


Tôi gõ man grep sau đó tôi nhấn s sau đó tôi thấy tệp nhật ký: sau đó tôi gõ -i và ENTER nhưng tôi không thấy mô tả Hoặc có một cái gì đó mà tôi không biết
Mohammad Reza Rezwani


2

Phương pháp hiệu quả nhất mà tôi biết là tìm kiếm trang man (Trang -inày dường như không thể hiển thị mã của tôi. Ý tôi là vậy <space><space><space>-i). Đó là 3 khoảng trắng (bạn có thể cần nhiều hơn / ít khoảng trắng hơn) theo sau là cờ bạn đang tìm kiếm. Nó hầu như luôn hoạt động theo kinh nghiệm của tôi và bạn có thể thay đổi thành một số biến thể của nó trong trường hợp nó không hoạt động.

Nó hoạt động vì tài liệu thực tế của các cờ thường được thụt lề. Nó tránh việc tìm kiếm các đề cập khác về cờ trong các phần khác, bởi vì thường chỉ có một khoảng trống trước chúng.


1

Thông qua tất cả các câu trả lời có thể tốt, nhưng tôi nghĩ rằng bạn chỉ tập trung vào một phần của tài liệu, không phải tất cả. Ví dụ: để tìm công -itắc của tài liệu grep:

info grep Invoking Command-line\ Options Matching\ Control

Tôi sẽ tìm thấy tất cả thông tin về "grep", cách "gọi" các "tùy chọn dòng lệnh" cụ thể cho "điều khiển khớp". Đáng buồn là nó không đi sâu hơn thế nữa, nhưng nó có -i, -y, --ignore-casetrong những cái đầu tiên 25 dòng, một cái gì đó hợp lý mà bạn không cần phải di chuyển tất cả các con đường của bạn xuống.

Giải pháp này linh hoạt hơn và cũng cho phép bạn tìm kiếm tất cả các thông tin:

info --apropos=--ignore-case
"(coreutils)join invocation" -- --ignore-case <1>
"(coreutils)uniq invocation" -- --ignore-case <2>
"(coreutils)sort invocation" -- --ignore-case
"(gettext)msggrep Invocation" -- --ignore-case, ‘msggrep’ option
"(grep)Matching Control" -- --ignore-case

(phải sử dụng --ignore-casethay vì -ivì nó quá phổ biến, nhưng bạn chỉ có thể xử lý đầu ra để thông tin trong mọi trường hợp)

Trong trường hợp này, bạn có cả tên của trang thông tin và phần chính xác. Ah, gần như quên mất, bạn cũng có thể tabđi qua hầu hết các phần của trang thông tin.


1

Bạn có thể sử dụng Perl và "chế độ đoạn" của nó để chỉ trích xuất đoạn có liên quan:

man grep | perl -00 -ne 'print if / -i/'

1

Cách tiếp cận yêu thích của tôi để tìm một tùy chọn nhất định trong một mantrang là sử dụng regex như thế nào \s{2,}-option. Đối với câu hỏi trong tay, bạn có thể làm man grepvà sau đó nhập regex:

/\s{3,}-i

hoặc là

/ {3,}-i
 ^------------- space here

Điều này sẽ -ichỉ phù hợp khi theo sau bởi ba hoặc nhiều không gian.


0

Theo lessmặc định được sử dụng làm máy nhắn tin man, bạn có thể sử dụng LESSbiến môi trường để truyền một mẫu để tìm kiếm khi lessmở trang. Điều này giống hệt với làm ví dụ man lsvà sau đó tìm kiếm tùy chọn --allhoặc -abằng cách nhập /và sau đó nhập mẫu, ví dụ --allhoặc -a.

Tất cả những điều này có thể được thực hiện bằng cách:

LESS='+/--all' man ls

Hoặc là

LESS='+/-a' man ls

Nhập những gì bạn muốn tìm kiếm sau /.

Có lẽ điều này hoạt động tốt nhất cho các tùy chọn dài (ví dụ --all) so với các tùy chọn ngắn (ví dụ -a).


0

Nếu bạn muốn grepcác man <program>kết quả cho một mô hình bắt đầu bằng một gạch nối, sử dụng -- trước khi mô hình bạn chỉ định. Ví dụ sử dụng man find:

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, hãy 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.

Nguồ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.