grep la página man de un comando para opciones con guiones

18

Supongamos que quiero saber el uso del -iinterruptor al grepmando sin desplazarme. Necesito la especificación solo para ese comando o al menos veo que la pantalla muestra eso primero. ¿Así que cómo? Como se puede decir en general, no solo para grep -i.

Mohammad Reza Rezwani
fuente
44
aprender a buscar en Vim
arsaKasra

Respuestas:

14

Prueba este simple sedcomando,

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

Explicación:

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

        |<-Search pattern->|

Imprimirá la línea que contiene el patrón de búsqueda junto con 2 líneas que se presentan justo debajo de la línea del patrón de búsqueda.

O

Simplemente puede dar solo las banderas en el patrón de búsqueda como a continuación.

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.

Puede agregar este script a su .bashrc( $HOME/.bashrc) para acceder rápidamente:

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

Escriba el siguiente comando en la terminal:

man grep

Luego escriba el carácter de barra inclinada /, y escriba su búsqueda, como -i, seguido de Enter. Esto posicionará el cursor en la primera aparición de la cadena de búsqueda. Al presionar se nmueve el cursor a la siguiente aparición. Presionando Shift+ nmueve el cursor a la ocurrencia anterior.

girardengo
fuente
1
Se localizará todo el -ies el man greppage.But PO quiere solamente la descripción relacionada con -ibandera en la página hombre.
Avinash Raj
3
@AvinashRaj no, te permitirá desplazarte por cada aparición de -i. Eso es exactamente lo que quiere el OP.
terdon
9

Si bien el enfoque más simple es buscar /según lo sugerido por @girardengo, también puede usar en greplugar de lo sedque me parece más simple:

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

Los -A Nmedios "Imprimir N líneas después de la coincidencia. Sólo un truco para conseguir las próximas líneas, similares a las de Avinash sed enfoque.

terdon
fuente
3

Puede usar la función de búsqueda en el interior man, solo pres "s", escriba la tecla que está buscando (-i en su caso) y presione intro.

animaletdesequia
fuente
Escribo man grep después de eso presiono s después de eso veo el archivo de registro: después de eso escribo -i y ENTER pero no veo la descripción O hay algo que no sé
Mohammad Reza Rezwani
2

El método más eficiente que conozco es buscar en la página del manual -i(este sitio parece no mostrar mi código. Lo que quiero decir es <space><space><space>-i). Son 3 espacios (puede que necesite más / menos espacios) seguidos de la bandera que está buscando. Casi siempre funciona en mi experiencia, y puede cambiar a alguna variante en los casos en que no funciona.

Funciona porque la documentación real de las banderas suele tener sangría. Evita encontrar otras menciones de la bandera en otras secciones, porque generalmente solo hay un espacio delante de ellas.

Harold R. Eason
fuente
1

A través de todas las respuestas puede estar bien, pero creo que te estás enfocando solo en una pieza de documentación, no en todas. Por ejemplo, para encontrar el -iinterruptor de la documentación grep:

info grep Invoking Command-line\ Options Matching\ Control

Encontraré toda la información sobre "grep", cómo "invocar" las "opciones de línea de comandos" específicas para "control de coincidencia". Por desgracia, no ir más profundo que eso, pero tiene -i, -y, --ignore-caseen Los primeros 25 líneas, algo razonable que usted no tiene que desplazarse todo el camino hacia abajo.

Esta solución es la más flexible y también le permite buscar en todas las páginas de información:

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

(tuvo que usar en --ignore-caselugar de, -iya que era demasiado común, pero puede procesar la salida a información en cualquier caso)

En este caso, tiene el nombre de la página de información y la sección exacta. Ah, casi lo olvido, también puedes acceder a tabla mayoría de las secciones de las páginas de información.

Braiam
fuente
1

Puede usar Perl y su "modo de párrafo" para extraer solo el párrafo relevante:

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

Mi enfoque favorito para encontrar una opción determinada en una manpágina es usar una expresión regular como \s{2,}-option. Para la pregunta en mano, puede hacer man grepy luego escribir la expresión regular:

/\s{3,}-i

o

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

Esto coincidirá -isolo cuando sea seguido por tres o más espacios.

sergio
fuente
0

Como lessse usa de manera predeterminada como buscapersonas man, puede usar la LESSvariable de entorno para pasar un patrón para buscar cuando se lessabre la página. Esto es idéntico a hacer, por ejemplo, man lsy luego buscar la opción --allo -aescribiendo /y luego ingresando el patrón, por ejemplo, --allo -a.

Todo esto puede hacerse por:

LESS='+/--all' man ls

O

LESS='+/-a' man ls

Ingrese lo que desea buscar /.

Presumiblemente, esto funciona mejor para las opciones largas (por ejemplo --all) en comparación con las cortas (por ejemplo -a).

heemayl
fuente
0

Si desea obtener greplos man <program>resultados para un patrón que comienza con un guión, úselo -- antes del patrón que especifique. Ejemplo usando man find:

man find | grep -- -type

Si desea más información, por ejemplo, la sección completa que describe una opción, intente usar 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.

Fuente

karel
fuente