¿Cómo buscar un patrón que contenga guiones dentro de las páginas man?

11

Estoy tratando de encontrar un comando para buscar un patrón que contenga guiones dentro de todas las páginas de manual.

Lo miré man many encontré estas 3 opciones:

-K, --global-apropos

Busque texto en todas las páginas del manual. Esta es una búsqueda de fuerza bruta, y es probable que tome algún tiempo; si puede, debe especificar una sección para reducir la cantidad de páginas que deben buscarse. Los términos de búsqueda pueden ser cadenas simples (el valor predeterminado) o expresiones regulares si --regexse utiliza la opción.

-w, --where, --path,--location

En realidad, no muestra las páginas del manual, pero imprime las ubicaciones de los archivos fuente nroff que se formatearían.

-S list` -s list`t--sections=list

La lista es una lista separada por dos puntos o comas de secciones de manual específicas de orden para buscar. Esta opción anula la $MANSECTvariable de entorno. (La -sortografía es para compatibilidad con el Sistema V.)

Intenté combinarlos para buscar el patrón, mark-modified-linesque es una opción de línea de lectura descrita en man bash:

$ man -s1 -Kw mark-modified-lines

Pero no encuentra ninguna página:

No manual entry for mark-modified-lines

Y el comando sale con el código 16.
Pensé que tal vez la sintaxis del comando era incorrecta, pero no lo parece, ya que este comando encuentra correctamente las 5 páginas de manual en mi sistema que contienen la palabra guitar:

$ man -s1 -Kw guitar

  /usr/share/man/man1/ffmpeg-all.1.gz
  /usr/share/man/man1/ffserver-all.1.gz
  /usr/share/man/man1/ffplay-all.1.gz
  /usr/share/man/man1/ffmpeg-filters.1.gz
  /usr/share/man/man1/ffprobe-all.1.gz

Pensé que tal vez los guiones en la palabra causaban un problema. En man bash, encontré la --regexopción que se describe a continuación:

--regex

Muestre todas las páginas con cualquier parte de sus nombres o sus descripciones que coincidan con cada argumento de página como una expresión regular, como con apropos(1). Como generalmente no hay una forma razonable de elegir una "mejor" página al buscar una expresión regular, esta opción implica -a.

Traté de usar esta opción y reemplazar la palabra mark-modified-linescon la expresión regular mark.modified.lines, donde los guiones se reemplazan con el metacarácter .que debe coincidir con cualquier carácter:

$ man -s1 -Kw --regex 'mark.modified.lines'

Todavía no imprime ninguna página, aunque sé que el texto está escrito en la bashpágina del manual.

El metacarácter .en la expresión regular parece ser analizado como se esperaba, ya que este comando:

$ man -s1 -Kw --regex 'mark.mo'

Huellas dactilares:

  /usr/share/man/man1/x11perfcomp.1.gz
  /usr/share/man/man1/xditview.1.gz

Y estas 2 páginas de manual ( x11perfcomp, xditview) coinciden con la expresión regular mark.mo. Más específicamente, man x11perfcompcontiene esta línea:

Mark Moraes wrote the original scripts to compare servers.
^^^^^^^

Y man xditviewcontiene esta línea:

    Mark Moraes (University of Toronto)
    ^^^^^^^

Sin embargo, man -s1 -Kw --regex 'mark.mo'no imprime la página de manual de bash:

/usr/share/man/man1/bash.1.gz

Mientras esperaba que lo haría, ya que contiene esta línea:

mark-modified-lines (Off)
^^^^^^^

¿Es posible buscar un patrón que contenga guiones dentro de las páginas del manual?

usuario938271
fuente

Respuestas:

15

man -Kbusca el código fuente de las páginas del manual, no su forma representada (como se muestra en man). Los guiones están codificados \-, por lo que debe buscar eso:

man -s1 -Kw 'mark\-mo'

Sí, esto es bastante oscuro. La manpágina del manual menciona, en la descripción de la -Kopción, que

Tenga en cuenta que esto busca en las fuentes de las páginas del manual, no en el texto representado, por lo que puede incluir falsos positivos debido a cosas como comentarios en los archivos fuente. Buscar el texto renderizado sería mucho más lento.

pero usar esto correctamente implica conocer la representación fuente del texto que está buscando.

Stephen Kitt
fuente
1
¿Oscuro? Si. Además, es un error.
kubanczyk
@kubanczyk bueno, coincide con la especificación, pero sí, estoy de acuerdo en que la especificación tiene errores ;-).
Stephen Kitt