как выполнить grep текст до следующего пробела?

как выполнить grep текст до следующего пробела?
7/04/27 10:50:17 INFO Master: Driver submitted org.apache.spark.deploy.worker.DriverWrapper
17/04/27 10:50:17 INFO Master: Launching driver driver-20170427105017-0000 on worker worker-20170427103840-192.168.5.242-7078
17/04/27 10:50:22 INFO Master: 192.168.5.5:53156 got disassociated, removing it.
17/04/27 10:50:22 INFO Master: 192.168.5.5:37668 got disassociated, removing it.
17/04/27 10:50:22 INFO Master: 192.168.5.5:53154 got disassociated, removing it.
17/04/27 10:55:27 INFO Master: Registering app ETL DataPipeline App
17/04/27 10:55:27 INFO Master: Registered app ETL DataPipeline App with ID app-20170427105527-0000
17/04/27 10:55:27 INFO Master: Launching executor app-20170427105527-0000/0 on worker worker-20170427103842-192.168.5.175-7078
17/04/27 10:55:27 INFO Master: Launching executor app-20170427105527-0000/1 on worker worker-20170427103838-192.168.5.37-7078
17/04/27 11:08:25 INFO Master: Asked to kill driver driver-20170427105017-0000
17/04/27 11:08:25 INFO Master: Kill request for driver-20170427105017-0000 submitted
17/04/27 11:08:26 INFO Master: Received unregister request from application app-20170427105527-0000

Как мне получить driver-20170427105017-0000 и соответствующий 192.168.5.242, а также как выполнить grep app-20170427105527-0000/0 и соответствующий ему 192.168.5.175.

решение1

Используя sed, чтобы получитьвсе driverи executorсообщения, связанные с «Запуском»:

$ sed -n -E 's/^.*Launching (driver|executor) ([^ ]*).*worker-[0-9]*-([^-]*).*$/\2 \3/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
  • [^ ]*будет соответствовать любому количеству любых символов, кроме пробела.
  • \2и \3являются обратными ссылками на то, что соответствует вторым и третьим скобкам соответственно. Вторые скобки содержат [^ ]*и будут соответствовать тексту после Launching driverили Launching executor, а третьи скобки содержат [^-]*и будут соответствовать IP-адресу (до , -который завершает адрес).
  • ^и $in s/^...$/.../pприкрепляет регулярное выражение в начале и конце строки, в то время как pсообщает sedо необходимости «вывести» результат замены, если она была сделана.

Альтернативный вариант, возможно более надежный из-за меньшего количества магии регулярных выражений, можно реализовать с помощью awk:

$ awk '/Launching/ { split($NF, a, "-"); print $7, a[3] }' file.in

Связанный контент