Esto se probó en El Capitan y en 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: "ERRORES" es un título de sección en esa (y varias otras) páginas de manual. Para los títulos de las secciones, grepping solo parece funcionar para los primeros 2 caracteres; esto es consistente en algunos títulos de sección diferentes que probamos. Para el resto del contenido, grep
parece funcionar como se esperaba.
Ingresé a una caja de Linux sin sabor a BSD (Amazon Linux) y no parece exhibir el mismo comportamiento.
¿Que está pasando aqui?
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:
man ls > man.ls
nano man.ls
La palabra "ERRORES" en realidad se ve así en el archivo:
B^HBU^HUG^HGS^HS
Verá que los encabezados contienen caracteres de formato, por lo que la palabra completa "ERRORES" no está presente.
Si desea acceder al contenido de texto sin formato de la página del manual, puede utilizar el comando
man -P cat <thepage>
La -P
opción establece el buscapersonas en otro Unix e cat
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 un col -b
paso manual en la canalización:
man ls | col -b | grep BUGS
man ls | col -b | grep "BUGS"
), pude obtener lo que quería.nroff
comando para traducir eso si es necesario grep
. ¿Le importaría si lo amplío con cómo pasar el comando correcto a groff
través man
?man -P cat ls | grep BUGS
funciona de manera idéntica man ls | grep BUGS
, ambos no devuelven nada.troff
haya formateado la salida. Tampoco es suficiente eliminar los caracteres de retroceso (obtendrá "BBUUGGSS"), debe persuadir al formateador para que no los genere en primer lugar.
groff
nroff
man man
sugiere canalizar la salida col -b
para eliminar de forma inteligente los espacios de retroceso y, de man ls | col -b | grep BUGS
hecho, funciona en mi sistema (CentOS Linux). No estoy seguro si ese comando está disponible en MacOS.man -P "less -p BUGS" ls
?grotty
que impedirán que emita secuencias de control TTY-37 o ECMA48.
muru
man foo | grep bar
, obtengo una tubería que no responde (y tal vez una terminal en mal estado para arrancar). :/ mandb man , que es lo que sueles ver en Linux, es más sensato.JdeBP