텍스트를 다음 공백까지 어떻게 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

드라이버-20170427105017-0000 및 각각의 192.168.5.242를 얻는 방법과 마찬가지로 app-20170427105527-0000/0 및 각각의 192.168.5.175를 grep하는 방법입니다.

답변1

sed얻기 위해 사용모두 driverexecutor"실행 중"과 관련된 메시지:

$ 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두 번째 및 세 번째 괄호와 각각 일치하는 항목에 대한 역참조입니다 . 두 번째 괄호는 또는 [^ ]*뒤의 텍스트를 포함하고 일치하며 , 세 번째 괄호는 IP 주소를 포함 하고 일치합니다( 주소를 끝내는 까지 ).Launching driverLaunching executor[^-]*-
  • ^줄의 시작과 끝 부분에 정규식을 고정하고, $대체 결과 가 있으면 이를 "인쇄"하도록 지시합니다 .s/^...$/.../ppsed

또는 다음을 사용하여 정규 표현식 마술이 적기 때문에 더 강력할 수 있습니다 awk.

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

관련 정보