GNU/Linux >> Znalost Linux >  >> Linux

Existuje způsob, jak hledat příznak v manuálové stránce?

Užitečná odpověď rici vysvětluje problém s původním přístupem dobře.

Za zmínku však stojí ještě jedna věc:

man Výstup 's obsahuje řídicí znaky formátování , které zasahují do textového vyhledávání .

Pokud potrubím do col -b před hledáním , tyto řídicí znaky jsou odstraněny – vedlejší efekt je, že výsledky vyhledávání budou také jako prostý text.

Nicméně grep není pro tuto práci tím správným nástrojem; Doporučuji použít awk následujícím způsobem získáte popis -O :

man gcc | col -b | awk -v RS= '/^\s+-O\n/'
  • RS= (prázdný oddělovač vstupu a záznamu) je awk idiom, který rozděluje vstup do bloků neprázdných řádků, takže porovnání volby na začátku takového bloku zajistí, že všechny řádky obsahující popis možnosti jsou vráceny.

Pokud máte awk pouze s funkcemi POSIX jako je BSD/OSX awk , použijte tuto verzi:

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

Je zřejmé, že psaní takového příkazu je poněkud těžkopádné, proto najděte generický bash funkce manopt níže, což vrátí popis zadané možnosti pro zadaný příkaz z jeho man stránka . (Můžou existovat falešně pozitivní a negativní, ale celkově to funguje docela dobře.)

Příklady:

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 funkce manopt() - umístěte do ~/.bashrc , například:

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

Přispěl 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

Mám podezření, že jste ve skutečnosti nepoužili grep $'-O\n' , ale spíše nějaký příznak rozpoznávaný grep .

Z pohledu grepu jednoduše předáváte argument a tento argument začíná - takže to bude interpretováno jako možnost. Musíte udělat něco jako grep -- -O$ explicitně označit konec seznamu možností, nebo grep -e -O$ explicitně označit vzor jako vzor. V žádném případě nemůžete do vzoru zahrnout nový řádek, protože vzory grep jsou ve skutečnosti seznamy vzorů oddělené znaky nového řádku, takže argument $'foo\n' jsou ve skutečnosti dva vzory, foo a prázdný řetězec a prázdný řetězec bude odpovídat každému řádku.

Možná jste hledali příznak -e protože to bere vzor jako argument a když mu jako argument přidáte nový řádek, grep najde každý řádek v celém souboru.

U většiny programů GNU, jako je gcc, můžete najít info jednodušší navigace, protože obsahuje referenční odkazy, obsahy a dokonce i indexy. info gcc dokument obsahuje rejstřík možností, což je velmi užitečné. V některých linuxových distribucích a poněkud překvapivě, protože se nazývají distribucemi GNU/linux, je nutné samostatně nainstalovat info balíčky, ačkoli man soubory jsou distribuovány se základním softwarem. Balíček debian/ubuntu obsahující gcc info souborů se nazývá gcc-doc , například. (Použití -doc přípona názvu balíčku je docela běžná.)

V případě gcc můžete rychle najít možnost pomocí příkazu jako:

info gcc "option index" O

nebo

info gcc --index-search=funroll-loops

U programů s méně možnostmi je obvykle dost dobré použít info -O možnost:

info -O gawk

Linux
  1. Způsob, jak hledat v manuálových stránkách scénář typického použití?

  2. Existuje způsob, jak se procesy, které nejsou rootem, vázat na privilegované porty v Linuxu?

  3. Žádná manuálová stránka pro příkaz cd

  1. Kde je manuálová stránka pro funkci `sizeof` C?

  2. Existuje ekvivalent cd - pro cp nebo mv?

  3. Existuje způsob, jak přestat psát 'sudo' pro každou maličkost v Linuxu?

  1. Jak přidat položky manuálové stránky pro vlastní elektrické nástroje?

  2. Existuje způsob, jak naslouchat procesu?

  3. Otevřete manuálovou stránku a vyhledejte řetězec v jediném příkazu