grep halaman manual dari perintah untuk opsi yang ditulis dgn tanda penghubung

18

Misalkan saya ingin mengetahui penggunaan perintah -iswitch in greptanpa menggulir. Saya perlu spesifikasinya hanya untuk perintah itu atau paling tidak lihat layarnya yang pertama. Jadi bagaimana? Seperti yang bisa Anda katakan secara umum bukan hanya untuk grep -i.

Mohammad Reza Rezwani
sumber
4
belajar mencari di Vim
arsaKasra

Jawaban:

14

Coba sedperintah sederhana ini ,

$ 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.)

Penjelasan:

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

        |<-Search pattern->|

Ini akan mencetak garis yang berisi pola pencarian bersama dengan 2 baris yang hadir tepat di bawah ke garis pola pencarian.

ATAU

Anda cukup memberikan hanya flag di patten pencarian seperti di bawah ini.

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.

Anda dapat menambahkan skrip ini ke .bashrc( $HOME/.bashrc) Anda untuk akses cepat:

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

Ketikkan perintah di bawah ini pada terminal:

man grep

Kemudian ketik karakter garis miring /,, dan tulis pencarian Anda, seperti -i, diikuti oleh Enter. Ini akan memposisikan kursor pada kemunculan pertama string pencarian. Menekan akan nmemindahkan kursor ke kejadian berikutnya. Menekan Shift+ nmemindahkan kursor ke kejadian sebelumnya.

girardengo
sumber
1
Ini akan menemukan semua halaman -i. man grepTetapi OP hanya menginginkan deskripsi yang terkait dengan -iflag di halaman manual.
Avinash Raj
3
@AvinashRaj tidak, ini akan memungkinkan Anda untuk menelusuri setiap kemunculan -i. Persis seperti yang diinginkan OP.
terdon
9

Meskipun pendekatan paling sederhana adalah mencari dengan /seperti yang disarankan oleh @ girardengo, Anda juga dapat menggunakan grepalih-alih sedyang menurut saya lebih sederhana:

$ 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.)

The -A Nberarti "Cetak N baris setelah yang cocok. Hanya trik untuk mendapatkan beberapa baris berikutnya, mirip dengan Avinash ini sed pendekatan.

terdon
sumber
3

Anda dapat menggunakan fungsi pencarian di dalam man, cukup pres "s", ketik tombol yang Anda cari, (-i dalam kasus Anda) dan tekan intro.

animaletdesequia
sumber
Saya ketik man grep setelah itu saya tekan s setelah itu saya melihat file log: setelah itu saya ketik -i dan ENTER tapi saya tidak melihat deskripsi Atau ada sesuatu yang saya tidak tahu
Mohammad Reza Rezwani
2

Metode yang paling efisien yang saya ketahui adalah mencari halaman manual untuk -i(Situs ini tampaknya gagal membuat kode saya. Yang saya maksud adalah <space><space><space>-i). Itu 3 ruang (Anda mungkin perlu lebih banyak / lebih sedikit ruang) diikuti oleh bendera yang Anda cari. Ini hampir selalu berfungsi dalam pengalaman saya, dan Anda dapat mengubahnya ke beberapa varian dalam kasus di mana itu tidak berhasil.

Ini berfungsi karena dokumentasi flag yang sebenarnya biasanya diindentasi. Ini menghindari menemukan sebutan lain dari bendera di bagian lain, karena biasanya hanya ada satu ruang sebelum mereka.

Harold R. Eason
sumber
1

Melalui semua jawaban mungkin baik-baik saja, tetapi saya pikir Anda hanya berfokus pada sepotong dokumentasi, tidak semua. Misalnya, untuk menemukan -isakelar dokumentasi grep:

info grep Invoking Command-line\ Options Matching\ Control

Saya akan menemukan semua informasi tentang "grep", cara "memanggil" "opsi baris perintah" khusus untuk "kontrol yang cocok". Sayangnya itu tidak pergi lebih dalam dari itu, tetapi memiliki -i, -y, --ignore-casedi pengalaman pertama 25 baris, sesuatu yang wajar bahwa Anda tidak perlu gulir semua jalan ke bawah.

Solusi ini lebih fleksibel dan juga memungkinkan Anda untuk mencari semua informasi:

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

(harus menggunakan --ignore-casebukan -ikarena itu terlalu umum, tetapi Anda bisa memproses output ke info dalam hal apa pun)

Dalam hal ini, Anda memiliki nama halaman info dan bagian yang tepat. Ah, hampir lupa, Anda juga bisa tabmelalui sebagian besar halaman info.

Braiam
sumber
1

Anda dapat menggunakan Perl dan "mode paragraf" untuk mengekstrak hanya paragraf yang relevan:

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

Pendekatan favorit saya untuk menemukan opsi yang diberikan di manhalaman adalah menggunakan regex like \s{2,}-option. Untuk pertanyaan yang ada, Anda bisa melakukannya man grepdan kemudian ketik regex:

/\s{3,}-i

atau

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

Ini -ihanya akan cocok bila diikuti oleh tiga ruang atau lebih.

sergio
sumber
0

Seperti lessyang digunakan secara default sebagai penyeranta man, Anda dapat menggunakan LESSvariabel lingkungan untuk meneruskan pola untuk mencari ketika lessmembuka halaman. Ini identik dengan melakukan eg man lsdan kemudian mencari opsi --allatau -adengan mengetik /dan kemudian memasukkan pola eg --allatau -a.

Semua ini dapat dilakukan dengan:

LESS='+/--all' man ls

Atau

LESS='+/-a' man ls

Masukkan apa yang ingin Anda cari /.

Agaknya ini bekerja paling baik untuk opsi panjang (misalnya --all) dibandingkan dengan yang pendek (misalnya -a).

heemayl
sumber
0

Jika Anda ingin grepyang man <program>hasil untuk pola dimulai dengan tanda hubung, gunakan -- sebelum pola yang Anda tentukan. Contoh menggunakan man find:

man find | grep -- -type

Jika Anda ingin info lebih lanjut, misalnya seluruh bagian yang menggambarkan opsi, coba gunakan 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.

Sumber

karel
sumber