¿Existe una forma más sencilla de hacer esto? grep -v foo file | grep -v bar

Probablemente hay formas muy elegantes de hacerlo con egrep, pero ¿cómo ir con grep simple y llano?

EDITAR: grep -v "foo\|bar" file parece funcionar solo con GNU grep. Estoy en Solaris. ¿Alguna solución para eso?

Comentarios

  • Pregunta extraña porque en el primer ejemplo estás haciendo Y coincide, y en el segundo estás haciendo OR . El resultado será el mismo solo en condiciones muy específicas.
  • No, en realidad no. En el segundo ejemplo, el indicador -v es una negación. not(A or B) == not(A) and not(B)

Responder

Puede tener varias pruebas en una solo grep comando pasando cada expresión con un argumento -e en lugar de como el primer argumento que no es de opción como normalmente ve:

$ grep -v -e foo -e bar file 

Eso dice lo mismo que dice tu comando: imprime líneas de file que no contienen «foo» ni «bar» .

Tenga en cuenta que eliminar -v invierte completamente esto; ¡También cambia la operación lógica! Obtiene todas las líneas que contienen «foo» o «bar».

Respuesta

grep -Ev "word1|word2" debería funcionar bien

Comentarios

  • Como alternativa, puede usar egrep y soltar la barra invertida para carácter de tubería: egrep -v 'word1|word2
  • Resulta que esto no funciona con el grep de Solaris. Instalé el grep GNU y funcionó perfectamente. ' voy a editar mi pregunta para que sea específica de Solaris.
  • @rahmu \| es un grep GNU extensión, pero puede lograr lo mismo de forma portátil con -E y el operador |.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *