한 열에서 두개의 문자열만 출력하는 방법이 궁금합니다.

lee20no의 이미지

하기와 같은 log file에서

Error: Patch AT_6.2.0.b_0009c expected 'ASML-BB-001-0017A-HW' to be at version 0.201703311623

하기와 같이 두 개의 특정 열만 출력하고 싶습니다.
Patch AT_6.2.0.b_0009c ASML-BB-001-0017A-HW

하기 두개의 명령어를 사용하여 각각 한 문자열씩은 추출해 냈는데 같은 라인에 추출이 되지 않네요.
cat validation.log | awk ' {print $3} ' | grep "AT_6.2.0.b*" | grep -v ":"
sed "s/.*'\(.*\)'.*$/\1/" /data/file_upload/validation.log

참고로 하기와 같이 빈 공간을 구분자로 하기에는 맞지 않는 경우가 있어 두번째 문자열은 ''를 구분자로 사용하여 추출하고 싶습니다.

Error: Patch AT_6.2.0.b_0004c: digest mismatch for 'ecentre'

초보자에게 구원을 손길을 주세요. 여러 검색에도 나오지가 않에요.
참고로 bash script로 진행 중입니다.

ymir의 이미지

$ cat in.log
Error: Patch AT_6.2.0.b_0009c expected 'ASML-BB-001-0017A-HW' to be at version 0.201703311623
$ cat in.log | sed "s/.*\(Patch [^ ]\+\).*'\(.*\)'.*/\1 \2/g"
Patch AT_6.2.0.b_0009c ASML-BB-001-0017A-HW

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

lee20no의 이미지

하루 종일 고민한걸 한번에 한수 배우고 갑니다. 복 받으세요.^^

파이썬의 이미지

#!/usr/bin/python3
# -*- coding: utf-8 -*-
 
f = open("in.log", "r")
 
data = f.read()
 
data_s = data.split()
 
data_2 = data_s[2]
data_4 = data_s[4]
 
print("Patch", data_2, data_4[1:-1])
 
f.close()

$ ./1.py
Patch AT_6.2.0.b_0009c ASML-BB-001-0017A-HW
bushi의 이미지

bash 예요

$ x="Error: Patch AT_6.2.0.b_0009c expected 'ASML-BB-001-0017A-HW' to be at version 0.201703311623"
 
$ for y in ${x/Patch /patch=} ${x/expected /expected=}; do \
     [ "${y/=/}" = "$y" ] && continue; \
     eval ${y}; \
done; \
echo "patch: $patch  expected:$expected"
 
patch: AT_6.2.0.b_0009c  expected:ASML-BB-001-0017A-HW