GNU/Linux >> Linux Esercitazione >  >> Linux

C'è un modo per cercare un flag in una pagina man?

l'utile risposta di rici spiega bene il problema con l'approccio originale.

Tuttavia, c'è un'altra cosa degna di nota:

man l'output di contiene caratteri di controllo della formattazione , che interferiscono con le ricerche di testo .

Se passi a col -b prima della ricerca , questi caratteri di controllo vengono rimossi - nota l'effetto collaterale che anche i risultati della ricerca saranno in testo semplice.

Tuttavia, grep non è lo strumento adatto per questo lavoro; Suggerisco di usare awk come segue per ottenere la descrizione di -O :

man gcc | col -b | awk -v RS= '/^\s+-O\n/'
  • RS= (un separatore di record di input vuoto) è un linguaggio awk che suddivide l'input in blocchi di righe non vuote, quindi la corrispondenza dell'opzione all'inizio di tale blocco assicura che tutte le righe che comprendono la descrizione dell'opzione vengono restituiti.

Se hai un awk di sole funzionalità POSIX come BSD/OSX awk , utilizza questa versione:

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

Ovviamente, un tale comando è un po' macchinoso da digitare, quindi trova generic bash funzione manopt sotto, che restituisce la descrizione dell'opzione specificata per il comando specificato dal suo man pagina . (Possono esserci falsi positivi e negativi, ma nel complesso funziona abbastanza bene.)

Esempi:

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 funzione manopt() - posto in ~/.bashrc , ad esempio:

# 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 implementazione di manopt() :

Contributo di 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

Sospetto che tu non abbia effettivamente usato grep $'-O\n' , ma piuttosto qualche flag riconosciuto da grep .

Dal punto di vista di grep, stai semplicemente passando un argomento, e quell'argomento inizia con un - quindi sarà interpretato come un'opzione. Devi fare qualcosa come grep -- -O$ per contrassegnare esplicitamente la fine dell'elenco di opzioni, o grep -e -O$ per contrassegnare in modo esplicito il modello come tale. In ogni caso, non puoi includere una nuova riga in un modello perché i modelli grep sono in realtà elenchi di modelli separati da caratteri di nuova riga, quindi l'argomento $'foo\n' è in realtà due modelli, foo e la stringa vuota, e la stringa vuota corrisponderà a ogni riga.

Forse hai cercato la bandiera -e dal momento che prende uno schema come argomento e dandogli una nuova riga come argomento farà sì che grep trovi ogni riga nell'intero file.

Per la maggior parte dei programmi GNU, come gcc, potresti trovare info interfaccia più facile da navigare, poiché include collegamenti di riferimento, sommari e persino indici. Il info gcc document include un indice di opzioni, che è molto utile. In alcune distribuzioni Linux, e in qualche modo sorprendentemente dato che si chiamano distribuzioni GNU/linux, è necessario installare separatamente info packages sebbene man i file vengono distribuiti con il software di base. Il pacchetto debian/ubuntu contenente gcc info file si chiama gcc-doc , Per esempio. (L'uso del -doc suffisso al nome del pacchetto è abbastanza comune.)

Nel caso di gcc puoi trovare rapidamente un'opzione usando un comando come:

info gcc "option index" O

o

info gcc --index-search=funroll-loops

Per i programmi con meno opzioni, di solito è sufficiente utilizzare -O di info opzione:

info -O gawk

Linux
  1. C'è un modo per i processi non root di collegarsi alle porte privilegiate su Linux?

  2. Nessuna pagina man per il comando cd

  3. C'è un modo per riavviare i badblock?

  4. C'è un modo per fare in modo che i filesystem ext utilizzino meno spazio per se stessi in Linux?

  5. Esiste un equivalente di cd - per cp o mv?

Come trovare la pagina man più lunga in Linux

Esiste un client OneDrive per Linux?

Come aggiungere voci alla pagina man per i propri utensili elettrici?

Personaggi delle citazioni della pagina man?

C'è un modo per ottenere i rapporti Cache Hit/Miss per i dispositivi a blocchi in Linux?

C'è un modo per ottenere l'utilizzo corrente di txqueue ad es. dispositivo eth0 o tun?