Usando sed
para obter todas driver
e executor
mensagens relacionadas a "Lançamento":
$ sed -n -E 's/^.*Launching (driver|executor) ([^ ]*).*worker-[0-9]*-([^-]*).*$/ /p' file.in
driver-20170427105017-0000 192.168.5.242
app-20170427105527-0000/0 192.168.5.175
app-20170427105527-0000/1 192.168.5.37
-
[^ ]*
corresponderá a qualquer número de qualquer caractere, exceto ao espaço. -
e
são referências anteriores ao que corresponde ao segundo e terceiro parênteses, respectivamente. O segundo parênteses contém
[^ ]*
e corresponderá ao texto apósLaunching driver
ouLaunching executor
, e o terceiro parênteses contém[^-]*
e corresponderá ao endereço IP (até o-
que encerra o endereço). -
^
e$
ins/^...$/.../p
ancora a expressão regular no início e no final da linha, enquantop
diz ased
para "imprimir" o resultado da substituição, se uma for feita.
Como alternativa, e possivelmente mais robusta devido à mágica de expressão menos regular, usando awk
:
$ awk '/Launching/ { split($NF, a, "-"); print $7, a[3] }' file.in