2011-05-06 16 views
6

Quiero grep 2 patrones en un archivo en Solaris UNIX.Solaris - grep con funcionalidad O

Eso es grep 'patrón1 O patrón2' nombre de archivo.

El comando siguiente no funciona:

grep 'pattern1\|pattern2' filename

Lo que está mal con este comando?

NOTA: estoy en Solaris

Respuesta

0

ese comando funciona bien para mí. Agregue información adicional, como su plataforma, la expresión regular exacta y el contenido del archivo que está utilizando (minimizado al ejemplo más pequeño que aún reproduce el problema). (Añadiría un comentario a su publicación pero no tengo suficiente reputación.)

+1

patrón es simplemente una palabra y yo trabajo en una máquina Solaris Unix. – user742004

0

Eso debería ser correcto. Asegúrese de agregar o no los espacios apropiados, es decir, "patrón1 \ | patrón2" frente a "patrón1 \ | patrón2".

¿Estás seguro de que no estás teniendo problemas con los estuches o algo por el estilo? prueba el modificador -i.

+1

'\ |' no funciona en Solaris ... – jahroy

0

Eso depende completamente de lo que sean pattern1 y pattern2. Si son sólo palabras, que debería funcionar, de lo contrario se necesita:

sistema
grep '\(pattern1\)\|\(pattern2\)' 
+0

los patrones son solo palabras y dice la secuencia de escape desconocida '\ |' – user742004

+0

'\ |' no funciona en Solaris ... – jahroy

15

Qué operativo está usted?

Funciona en sistemas con GNU grep, pero en BSD, Solaris, etc., \| no es compatible.

Pruebe egrep o grep -E, p. Ej.

egrep 'pattern1|pattern2' 
+0

egrep funciona bien. Gracias – user742004

2

Si desea funcionalidad POSIX (comportamiento es decir, similar a Linux) que puede poner los binarios compatibles-2 POSIX al comienzo de su trayectoria:

$ echo $PATH 
/usr/xpg4/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:[...] 

También hay/usr/xpg6 cuales es POSIX 1 compatible.

/usr/bin: SVID/XPG3 
/usr/xpg4/bin: POSIX.2/POSIX.2a/SUS/SUSv2/XPG4 
/usr/xpg6/bin: POSIX.1-2001/SUSv3 
0

Un método arcano usando fgrep (es decir: cadenas fijas) que funciona en Solaris 10 ...

proporcionar un patrón de lista, con cada patrón separados por un salto de línea, sin embargo, citado de manera que sea interpretado por el shell como una sola palabra: -

fgrep 'pattern1 
pattern2' filename 

Este método también funciona para grep, fgrep y egrep en /usr/xpg4/bin, aunque el ERE tubo delimitado en cualquier egrep es a veces el menos quisquilloso.

Puede insertar nuevas líneas arbitrarias en una cadena si su shell permite editar el historial, por ejemplo: en bash número C-v C-j en el modo emacs o en el modo vi-command.