Esto se probó en El Capitan y en la High Sierra de un colega, en la Terminal estándar (bash).
user@hostname ~ $ man ls | grep "BU"
BUGS
user@hostname ~ $ man ls | grep "BUG"
user@hostname ~ $
user@hostname ~ $ man ls | grep "IEEE"
files in order to be compatible with the IEEE Std 1003.2 (``POSIX.2'')
The ls utility conforms to IEEE Std 1003.1-2001 (``POSIX.1'').
Para aclarar: "BUGS" es un título de sección en esa (y varias otras) páginas de manual. Para los títulos de sección, grepping solo parece funcionar para los primeros 2 caracteres; Esto es consistente en algunos títulos de secciones diferentes que probamos. Para el resto del contenido, grep
parece funcionar como se esperaba.
Me metí en una caja de Linux sin sabor BSD (Amazon Linux) y no parece mostrar el mismo comportamiento.
¿Que está pasando aqui?
macos
terminal
command-line
open-source
man
Jonathan Merklin
fuente
fuente
man foo | grep bar
, obtengo una tubería que no responde (y tal vez un terminal desordenado para arrancar). : / mandb man , que es lo que normalmente se ve en Linux, es más sensato.Respuestas:
Puede ver lo que está sucediendo si ve los códigos sin procesar dentro de una página de manual. Una forma de hacerlo es exportar la página de manual a un archivo e inspeccionar su contenido directamente:
La palabra "ERRORES" realmente se ve así en el archivo:
Verá que los encabezados contienen caracteres de formato, por lo que la palabra completa "BUGS" no está presente.
Si desea acceder al contenido de texto sin formato de la página del manual, puede usar el comando
La
-P
opción establece el buscapersonas en otro Unix ecat
ignorará la información de formato, dando una salida de texto sin formato. Sin embargo, esto no parece funcionar en macOS, por lo que la salida necesita uncol -b
paso manual en la tubería:fuente
man ls | col -b | grep "BUGS"
) pude obtener lo que quería.nroff
comando para traducir eso si lo necesitagrep
, ¿le importaría si amplié esto con cómo pasar el comando correcto agroff
través deman
?man -P cat ls | grep BUGS
funciona de manera idénticaman ls | grep BUGS
, ambos no devuelven nada.grotty
que evitarán que emita secuencias de control TTY-37 o ECMA48.