pkill com regex

2

Eu tenho poucos processos Java sendo executados como abaixo,

java -jar /my/path/to/app/myapp.jar

java -jar /my/path/to/app/prodapp.jar

java -jar /my/path/to/app/testapp.jar

java -jar /my/path/to/app/myapp_v.01.jar

Agora posso matar um processo em particular por pkill -f myapp.jar , que está funcionando como esperado. Como faço para matar myapp_v.01.jar usando um regex, eu tentei pkill -f myapp_*.jar . O que há de errado com esse regex?

Eu não estou procurando uma alternativa para pkill , eu queria saber por que o regex não está funcionando.

    
por Govind Kailas 07.10.2015 / 11:59

1 resposta

3

Você precisa entender o básico das expressões regulares para isso. O modificador * não significa 'qualquer coisa' como é frequentemente assumido. O asterisco tem esse significado no shell, mas isso é algo diferente, não uma regex. * significa: pegue o caractere anterior (ou grupo de caracteres se precedido por um grupo [] ) e tente combiná-lo entre zero e um número ilimitado de ocorrências.

Então, o que você está realmente verificando com myapp_*.jar é se algum dos itens a seguir está presente na lista de processos:

myapp.jar
myapp_.jar
myapp__.jar
myapp___.jar
...

Veja o que quero dizer? Não corresponde a 'myapp_v.01.jar' de nenhuma forma. Se você quiser combinar qualquer personagem, precisará de . . Então, seu regex para pkill poderia ser: myapp_*.*.jar

    
por 07.10.2015 / 12:21