La búsqueda recursiva no funciona para grep en solaris

20

En nuestro servidor Solaris, descubro que grep -rno funciona, que es la forma habitual que uso grep. Parece que egreptiene el mismo comportamiento.

Dado que no tengo control sobre la máquina, ¿hay alguna forma de greprealizar una búsqueda recursiva? ¿O necesito canalizar la salida de finden grep?

Eric Wilson
fuente
1
¿Qué versión de Solaris estás usando?
jlliagre

Respuestas:

4

No estoy familiarizado con Solaris, pero si cambia de GNU / linux a Solaris, encontrará que la mayoría de los comandos se comportarán de manera ligeramente diferente. La versión GNU de las herramientas de Unix tiene características adicionales que faltan en los Unix "propietarios".

Puede descargar GNU grep (s) aquí y luego compilar e instalar.

Si tiene acceso de root, puede ejecutar configure --prefix = / usr / local De modo que las utilidades se instalen en / usr / local

Si no tiene acceso de root, puede ejecutar configure --prefix = $ {HOME} De modo que las utilidades se instalen en su directorio de inicio

bsd
fuente
--prefix=${HOME}}/.locales probablemente más aconsejable ... no es necesario saturar el directorio de inicio sharey las libcarpetas
jpaugh
1
El desorden de un hombre es organizado por otro hombre
bsd
¡Sin duda! Honestamente, estoy protegiéndome del mal día cuando digo: " share¡Tiene que ser un directorio basura!" rm -rfDoh!
jpaugh
31

Si desea usar find, esta sería la forma más rápida:

find . -type f -exec grep pattern {} +

Sin embargo, es muy probable que Gnu grep ya esté instalado en su máquina.

Forma parte de la instalación predeterminada en Solaris 11 en /usr/gnu/bin/grep. Lo mismo para Solaris 10 donde lo encuentra /usr/sfw/bin/ggrep. En versiones anteriores, es posible que se haya instalado desde sunfreeware u otros repositorios, verifique /usr/local/bin/grepy busque /opt/csw/bin/grepubicaciones comunes.

jlliagre
fuente
También puede hacer uso de la -nameopción con find.
sleepyweasel
@sleepyweasel -nameno buscará dentro de los archivos, sino que solo buscará los nombres de los archivos, que no es lo que pide el OP.
jlliagre
6

Use ggrep en su lugar si está instalado.

Por ejemplo, busque "mysearchstring" desde el directorio actual hasta todos los subdirectorios ( -R), y muestre el nombre del archivo y la ruta de las coincidencias ( -H) e ignore los archivos binarios ( -I). No olvides el *final del comando.

/usr/sfw/bin/ggrep -H -R -I "mysearchstring" *

ggrep se encuentra en /usr/sfw/bin Puede agregarlo a su perfil con un comando EXPORT para poder llamarlo directamente desde la línea de comando.

PATH=$PATH:/usr/sfw/bin
export PATH

Versión Solaris: SunOS 5.10 Generic_147440-13 sun4u sparc SUNW, SPARC-Enterprise

Underverse
fuente
1
Al menos en mi sistema, ggrepes de hecho GNU grep. ¡Gracias!
jpaugh
3

Descargue el ackscript perl independiente de http://betterthangrep.com/ , póngalo en su $HOME/biny aprenda a usarlo en su lugar. Creo que es, como se anuncia, mejor que grep para muchos usos en mi trabajo de desarrollo diario.

alanc
fuente
3

Solaris grep no tiene -ropción.

Puedes usar el siguiente comando.

find . -type f | xargs grep 'sometext'
Sachin Divekar
fuente
2
No necesita "control sobre el sistema" para compilar GNU grep e instalarlo en algún lugar bajo su directorio de inicio.
Keith Thompson
@KeithThompson gracias por señalarlo. He corregido mi respuesta.
Sachin Divekar
Esto es muy útil para encontrar todos los archivos que coincidan con un patrón de nombre y mostrar resultados con el archivo. Por ejemplo find /opt/ -name "*.sh" -type f | xargs grep "start"
Underverse
1

Sí, necesitarás el GNU grep. Personalmente, no echo de menos el indicador "-r" porque puede hacer lo mismo con una combinación de findy, greppero esto recuerda que tener las herramientas GNU disponibles en su caja Solaris es lo que consideraría una mejor práctica. Así que, aquí vamos:

No me gustaría descargar el código fuente de varios lugares en Internet y luego construirme usted mismo. Eso no es necesario. Si simplemente desea que su Solaris tenga las herramientas típicas de GNU disponibles, haga lo siguiente:

Si está en Solaris 10 , debería obtener el disco complementario Solaris 10. Sol solía distribuirlo, pero ahora vive aquí . Personalmente, siempre instalaré el contenido de este disco o al menos las partes más importantes de GNU. ¡Hágalo parte de su JumpStart (o lo que sea que use) para nuevos servidores en su organización!

Si está en Solaris 11, la vida es mucho más simple. Las herramientas GNU generalmente se instalan por defecto, pero no todas se propagan a zonas locales. IFS, el sistema de empaquetado de Solaris 11, hace su vida mucho más fácil, por lo que realmente debería mudarse a Solaris 11 (muchas otras razones también). La lista de paquetes que debe considerar tener siempre disponible para cualquier zona es la siguiente:

pkg: // solaris / archiver / gnu-tar
pkg: // solaris / developer / gnu-binutils
pkg: // solaris / diagnostico / top
pkg: // solaris / file / gnu-coreutils
pkg: // solaris / file / gnu-findutils
pkg: // solaris / text / gawk
pkg: // solaris / text / gnu-diffutils
pkg: // solaris / text / gnu-grep
pkg: // solaris / text / gnu-sed

y si usa el host para fines de desarrollo / compilación, es posible que desee agregar:

pkg: // solaris / developer / build / gnu-make
pkg: // solaris / developer / build / make
pkg: // solaris / developer / gcc-45
pkg: // solaris / system / header
pkg: // solaris / developer / build / autoconf
pkg: // solaris / developer / build / automake-110

Personalmente, haría que lo anterior (potencialmente menos las herramientas de desarrollo) sea parte de la instalación predeterminada de mi empresa para nuevos servidores / zonas. Los administradores de sistemas de Solaris a menudo insisten en ser diferentes del mundo Linux, pero realmente no hay necesidad de hacerlo. Simplemente hazlo y hazlo parte de tu instalación predeterminada. No te arrepentirás.

Peter
fuente
No estoy seguro si leyó la parte donde dije 'dado que no tengo control sobre la máquina ...' Estoy seguro de que esta es información útil para alguien, pero difícilmente es una respuesta a la pregunta que le hice. .
Eric Wilson
Es información para su administrador de sistemas. Él te ha dado una máquina paralizada en mi humilde opinión. Estas cosas deben instalarse por defecto. Pero sí, tiene razón, la información fue tal vez destinada a otros que vienen a este lugar y leen su pregunta. Hoy te estás perdiendo GNU grep, mañana te perderás GNU tar, etc. Simplemente no lo sabes todavía. :-)
Peter