GNU/Linux >> Belajar Linux >  >> Linux

Apakah ada cara untuk mencari bendera di halaman manual?

jawaban bermanfaat rici menjelaskan masalah dengan pendekatan asli dengan baik.

Namun, ada hal lain yang perlu disebutkan:

man output berisi pemformatan karakter kontrol , yang mengganggu penelusuran teks .

Jika Anda menyalurkan ke col -b sebelum menelusuri , karakter kontrol ini dihapus - perhatikan efek samping bahwa hasil penelusuran juga berupa teks biasa.

Namun, grep bukan alat yang tepat untuk pekerjaan ini; Saya sarankan menggunakan awk sebagai berikut untuk mendapatkan keterangan dari -O :

man gcc | col -b | awk -v RS= '/^\s+-O\n/'
  • RS= (pemisah input-record kosong) adalah idiom awk yang memecah input menjadi blok baris yang tidak kosong, sehingga mencocokkan opsi di awal blok tersebut memastikan bahwa semua baris berisi deskripsi opsi dikembalikan.

Jika Anda memiliki awk khusus fitur POSIX seperti BSD/OSX awk , gunakan versi ini:

man gcc | col -b | awk -v RS= '/^[[:blank:]]+-O\n/'

Jelas, perintah seperti itu agak rumit untuk diketik, jadi temukan generic bash fungsi manopt di bawah ini, yang mengembalikan deskripsi opsi yang ditentukan untuk perintah yang ditentukan dari man halaman . (Mungkin ada positif dan negatif palsu, tetapi secara keseluruhan berfungsi dengan baik.)

Contoh:

manopt gcc O          # search `man gcc` for description of `-O`
manopt grep regexp    # search `man grep` for description of `--regexp`
manopt find '-exec.*' # search `man find` for all actions _starting with_ '-exec'

bash fungsi manopt() - tempatkan di ~/.bashrc , misalnya:

# SYNOPSIS
#   manopt command opt
#
# DESCRIPTION
#   Returns the portion of COMMAND's man page describing option OPT.
#   Note: Result is plain text - formatting is lost.
#
#   OPT may be a short option (e.g., -F) or long option (e.g., --fixed-strings);
#   specifying the preceding '-' or '--' is OPTIONAL - UNLESS with long option
#   names preceded only by *1* '-', such as the actions for the `find` command.
#
#   Matching is exact by default; to turn on prefix matching for long options,
#   quote the prefix and append '.*', e.g.: `manopt find '-exec.*'` finds
#   both '-exec' and 'execdir'.
#
# EXAMPLES
#   manopt ls l           # same as: manopt ls -l
#   manopt sort reverse   # same as: manopt sort --reverse
#   manopt find -print    # MUST prefix with '-' here.
#   manopt find '-exec.*' # find options *starting* with '-exec'
manopt() {
  local cmd=$1 opt=$2
  [[ $opt == -* ]] || { (( ${#opt} == 1 )) && opt="-$opt" || opt="--$opt"; }
  man "$cmd" | col -b | awk -v opt="$opt" -v RS= '$0 ~ "(^|,)[[:blank:]]+" opt "([[:punct:][:space:]]|$)"'
}

fish implementasi manopt() :

Dikontribusikan oleh Ivan Aracki.

function manopt 
  set -l cmd $argv[1]
  set -l opt $argv[2] 
  if not echo $opt | grep '^-' >/dev/null
    if [ (string length $opt) = 1 ] 
      set opt "-$opt"
    else
      set opt "--$opt"
    end
  end
  man "$cmd" | col -b | awk -v opt="$opt" -v RS= '$0 ~ "(^|,)[[:blank:]]+" opt "([[:punct:][:space:]]|$)"'
end

Saya menduga Anda tidak benar-benar menggunakan grep $'-O\n' , melainkan beberapa flag yang dikenali oleh grep .

Dari sudut pandang grep, Anda hanya memberikan argumen, dan argumen tersebut dimulai dengan - jadi itu akan ditafsirkan sebagai pilihan. Anda perlu melakukan sesuatu seperti grep -- -O$ untuk menandai akhir daftar opsi secara eksplisit, atau grep -e -O$ untuk secara eksplisit menandai pola sebagai pola. Bagaimanapun, Anda tidak dapat menyertakan baris baru dalam suatu pola karena pola grep sebenarnya adalah daftar pola yang dipisahkan oleh karakter baris baru, sehingga argumen $'foo\n' sebenarnya adalah dua pola, foo dan string kosong, dan string kosong akan cocok dengan setiap baris.

Mungkin Anda mencari bendera -e karena itu menggunakan pola sebagai argumen, dan memberinya baris baru sebagai argumen akan menyebabkan grep menemukan setiap baris di seluruh file.

Untuk sebagian besar program GNU, seperti gcc, Anda mungkin menemukan info antarmuka lebih mudah dinavigasi, karena menyertakan tautan referensi, daftar isi, dan bahkan indeks. info gcc dokumen menyertakan indeks opsi, yang sangat berguna. Dalam beberapa distribusi linux, dan agak mengejutkan karena mereka menyebut diri mereka distribusi GNU/linux, perlu menginstal info secara terpisah paket meskipun man file didistribusikan dengan perangkat lunak dasar. Paket debian/ubuntu berisi gcc info file disebut gcc-doc , Misalnya. (Penggunaan -doc akhiran ke nama paket cukup umum.)

Dalam kasus gcc Anda dapat dengan cepat menemukan opsi menggunakan perintah seperti:

info gcc "option index" O

atau

info gcc --index-search=funroll-loops

Untuk program dengan opsi lebih sedikit, biasanya cukup baik menggunakan -O info opsi:

info -O gawk

Linux
  1. Apakah ada cara untuk 'uniq' dengan kolom?

  2. Mencari opsi tertentu di halaman manual

  3. Apakah ada cara untuk me-restart badblock?

  1. Apakah ada cara untuk membuat ext-filesystem menggunakan lebih sedikit ruang untuk dirinya sendiri di Linux?

  2. Apakah ada cara untuk berhenti menulis 'sudo' untuk setiap hal kecil di Linux?

  3. Apakah ada cara untuk mendengarkan proses?

  1. Cara Mencari Halaman Manual Untuk Skenario Penggunaan Biasa?

  2. Apakah ada cara untuk proses non-root untuk mengikat ke port istimewa di Linux?

  3. Buka halaman manual dan cari string dalam satu perintah