Necesito ayuda para construir un grep desde ps -ef para devolver solo las rutas de Java.
Digamos que tenemos el siguiente proceso en ejecución:
bash> ps -ef | grep java
user pid# 1 1 00:00 ? 00:04:00 /path/to/java/jdk_1.8/bin/java -foo=bar -foo2=bar2 ... etc.
Lo que era de esto es mostrar:
bash> ps -ef | grep 'some regex or pattern here'
/path/to/java/jdk_1.8/bin/java
Gracias a todos.
grep -oP "/.*?/bin/java"
Esto irá desde la primera barra hacia adelante que encuentre, luego intente hacer coincidir hasta la primera aparición de / bin / java. La capital P recibe un buen apoyo de expresiones regulares de GrepRespuestas:
Qué tal si
grep -oP "/.*?/bin/java"
Esto irá desde la primera barra hacia adelante que encuentre, luego intente hacer coincidir hasta la primera aparición de / bin / java. La capital P obtiene un buen soporte de expresiones regulares de grepo esto y no necesita el -P con grep incluso.
grep -oP "/.*/bin/java"
Comienza desde la primera barra diagonal hacia adelante y luego compara lo más posible cualquier carácter hasta e incluyendo / bin / java.Y si tuvo que resolverlo usted mismo desde cero, además de saber sobre expresiones regulares, puede probar las cosas rápidamente con eco, por ejemplo.
echo user pid# 1 1 00:00 ? 00:04:00 /path/to/java/jdk_1.8/bin/java -foo=bar -foo2=bar2 ... etc. | grep
a continuación, intente patrones. Y puede agregar un -i al grep, por ejemplo, o mezclarlo con -o para que -io haga que no se distinga entre mayúsculas y minúsculas (lo que hace -i).nota: lo anterior está bien, pero me gustaría señalar que si está interesado en expresiones regulares o tecnicismos
.*blah
es un poco interesante porque el.*
(es una evaluación codiciosa) puede incluir un bla, así que si tiene bla 5 veces, entonces coincidirá con bla 5 veces. 4 de.*
y el último de bla. Ahi esta.*?blah
(evaluación perezosa) que coincidiría con cualquier personaje hasta el primer bla. aunque eso requiere -P. Pero en su caso buscando / bin / java, no va a obtener / bin / java varias veces en una línea, por lo que no es un gran problema / problema, usar el.*
sin el ?.fuente
Me parece un poco tonto conseguirlo
ps
para imprimir una gran cantidad de información que no desea, entonces tiene que utilizar un complejogrep
Expresión para extraer lo que tú. hacer querer. Lo siguiente parece un mejor enfoque:Esto le dará la lista de argumentos del comando, pero puede eliminarla al argumento 0 con la
sed
filtrar:Si, como es casi seguro, no hay espacios en el
java
ruta, un filtro mucho más simple se puede utilizar:(De hecho el
$
se puede omitir, ya que la coincidencia "codiciosa" incluirá a todos los personajes hasta el final de la línea, aunque generalmente también es así para incluirla por legibilidad.fuente