grep strona man polecenia dla dzielonych opcji

18

Załóżmy, że chcę poznać użycie -iprzełącznika w greppoleceniu bez przewijania. Potrzebuję specyfikacji tylko dla tego polecenia lub przynajmniej zobaczę ekran, który pokazuje jako pierwszy. Więc jak? Jak można powiedzieć, ogólnie rzecz biorąc nie tylko grep -i.

Mohammad Reza Rezwani
źródło
4
naucz się wyszukiwać w Vimie
arsaKasra

Odpowiedzi:

14

Wypróbuj to proste sedpolecenie,

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

Wyjaśnienie:

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

        |<-Search pattern->|

Wydrukuje linię zawierającą wzorzec wyszukiwania wraz z 2 liniami znajdującymi się tuż poniżej linii wzorca wyszukiwania.

LUB

Możesz po prostu podać tylko flagi w polu wyszukiwania, jak poniżej.

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.

Możesz dodać ten skrypt do .bashrc( $HOME/.bashrc), aby uzyskać szybki dostęp:

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

Wpisz poniższe polecenie na terminalu:

man grep

Następnie wpisz znak ukośnika /, i wpisz wyszukiwanie, na przykład -i, a następnie Enter. Spowoduje to ustawienie kursora przy pierwszym wystąpieniu ciągu wyszukiwania. Naciśnięcie nprzenosi kursor do następnego wystąpienia. Naciśnięcie Shift+ nprzenosi kursor do poprzedniego wystąpienia.

girardengo
źródło
1
Lokalizuje wszystkie strony -i, ale man grepOP chce tylko opisu związanego z -iflagą na stronie man.
Avinash Raj
3
@AvinashRaj nie, pozwoli Ci przejść przez każdego wystąpienia -i. Właśnie tego chce OP.
terdon
9

Podczas gdy najprostszym podejściem jest wyszukiwanie za pomocą /sugestii @girardengo, możesz także użyć grepzamiast tego, sedco uważam za prostsze:

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

Te -A Nśrodki „Drukowanie N wierszy po jednej pasującej. Tylko sztuczka, aby uzyskać kilka następnych wierszy, podobne do Avinash za sed podejście.

terdon
źródło
3

Możesz użyć funkcji wyszukiwania w środku man, wystarczy "s"nacisnąć, wpisać szukany klucz (w twoim przypadku -i) i nacisnąć intro.

Animaletdesequia
źródło
Później wpisuję
2

Najbardziej skuteczną metodą, o której wiem, jest przeszukiwanie strony podręcznika systemowego -i(ta witryna wydaje się nie wyświetlać mojego kodu. Mam na myśli <space><space><space>-i). To 3 spacje (możesz potrzebować więcej / mniej spacji), a następnie flaga, której szukasz. Z mojego doświadczenia wynika, że ​​prawie zawsze działa i możesz go zmienić na inny wariant, jeśli nie działa.

Działa, ponieważ rzeczywista dokumentacja flag jest zwykle wcięta. Unika znajdowania innych wzmianek o flagi w innych sekcjach, ponieważ zwykle jest przed nimi tylko jedno miejsce.

Harold R. Eason
źródło
1

Wszystkie odpowiedzi mogą być w porządku, ale myślę, że skupiasz się tylko na dokumentacji, nie na wszystkich. Na przykład, aby znaleźć -iprzełącznik dokumentacji grep:

info grep Invoking Command-line\ Options Matching\ Control

Znajdę wszystkie informacje na temat „grep”, jak „wywołać” określone „opcje wiersza polecenia” dla „dopasowanej kontroli”. Niestety nie idzie bardziej głębiej, ale ma -i, -y, --ignore-casew pierwsze w 25 linii, coś rozsądne, że nie trzeba przewijać całą drogę w dół.

To rozwiązanie jest bardziej elastyczne i pozwala również przeszukiwać wszystkie strony informacyjne:

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

(musiał użyć --ignore-casezamiast, -iponieważ był zbyt powszechny, ale w każdym przypadku możesz po prostu przetworzyć dane wyjściowe na informacje)

W takim przypadku masz zarówno nazwę strony informacyjnej, jak i dokładną sekcję. Ach, prawie zapomniałem, możesz także tabprzejść przez większość sekcji stron informacyjnych.

Braiam
źródło
1

Możesz użyć Perla i jego „trybu akapitowego”, aby wyodrębnić tylko odpowiedni akapit:

man grep | perl -00 -ne 'print if / -i/'
choroba
źródło
1

Moim ulubionym podejściem do znalezienia danej opcji na manstronie jest użycie wyrażenia regularnego \s{2,}-option. Aby uzyskać pytanie, możesz zrobić, man grepa następnie wpisać wyrażenie regularne:

/\s{3,}-i

lub

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

Będzie to pasować -itylko wtedy, gdy po nim następują trzy lub więcej spacji.

sergio
źródło
0

Jak lessjest używany domyślnie jako pager dla man, można użyć LESSzmiennej środowiskowej zdać wzorzec wyszukiwania, gdy lessotwiera stronę. Jest to identyczne z wykonywaniem np. man lsA następnie szukaniem opcji --alllub -awpisywaniem, /a następnie wprowadzaniem wzorca np . --allLub -a.

Wszystko to można zrobić poprzez:

LESS='+/--all' man ls

Lub

LESS='+/-a' man ls

Wpisz, co chcesz wyszukać /.

Przypuszczalnie działa to najlepiej dla długich opcji (np. --all) W porównaniu do krótkich (np -a.).

heemayl
źródło
0

Jeśli chcesz się grepz man <program>wynikami dla wzorca począwszy myślnikiem, stosowanie -- przed wzór można określić. Przykład użycia man find:

man find | grep -- -type

Jeśli chcesz uzyskać więcej informacji, na przykład całą sekcję opisującą opcję, spróbuj użyć 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.

Źródło

Karel
źródło