inside example ejemplo regex unix grep regex-negation

regex - example - grep inside file



Unix grep regex que contiene ''x'' pero no contiene ''y'' (5)

Bueno, como todos estamos publicando respuestas, aquí está en awk ;-)

awk ''/x/ && !/y/'' infile

Espero que esto ayude.

Necesito una expresión regular de paso único para unix grep que contenga, digamos alfa, pero no contenga beta.

grep ''alpha'' <> | grep -v ''beta''


Estoy bastante seguro de que esto no es posible con expresiones regulares verdaderas. El ejemplo [^y]*x[^y]* coincidiría con yxy, ya que * permite cero o más coincidencias que no sean y.

EDITAR:

En realidad, esto parece funcionar: ^[^y]*x[^y]*$ . Básicamente significa "hacer coincidir cualquier línea que comience con cero o más caracteres que no sean y, luego tiene una x, luego termina con cero o más caracteres que no son y".


Intente utilizar el operador de exclusión: [^y]*x[^y]*


Las otras respuestas aquí muestran algunas formas en que puedes contorsionar diferentes variedades de expresiones regulares para hacer esto, aunque creo que resulta que la respuesta es, en general, "no hagas eso". Dichas expresiones regulares son mucho más difíciles de leer y probablemente más lentas de ejecutar que simplemente combinar dos expresiones regulares usando la lógica booleana de cualquier idioma que esté usando. Si está utilizando el comando grep en un intérprete de comandos de shell de Unix, simplemente canalice los resultados de uno a otro:

grep "alpha" | grep -v "beta"

Uso este tipo de construcciones todo el tiempo para sacar los resultados excesivos de grep . Si tiene una idea de qué conjunto de resultados será más pequeño, póngalo primero en la tubería para obtener el mejor rendimiento, ya que el segundo comando solo debe procesar el resultado de la primera, y no la entrada completa.


^((?!beta).)*alpha((?!beta).)*$ haría el truco, creo.