awk를 사용하여 서로 다른 문자 사이의 문자열을 추출합니다.

awk를 사용하여 서로 다른 문자 사이의 문자열을 추출합니다.

VirtualBox 가상 머신의 UUID를 가져오기 위해 bash 함수를 작성하려고 합니다. 저는 이 분야에 익숙하지 않아서 awk문제를 해결하기 위해 이를 사용하는 방법을 배우는 데 집중하려고 노력하고 있습니다. 나도 사용할 수 있다는 걸 sed알아요cut

내 "원시" 출력은 다음과 같습니다 VBoxManage list vms.

$ VBoxManage list vms
"FreeBSD" {1aac7062-bd59-47ee-9261-2f6aa8d9ef53}
"Windows 10" {64942de7-beb9-418c-9f52-5befcb6f577b}
"High Sierra" {07f73e1a-a0c4-4190-ade1-79a2e432b4d6}
"Test Machine" {9d0953a7-ca2a-4667-8c5b-1a9f550b2956}

내가 원하는 출력은 특정 가상 머신의 UUID를 얻는 것입니다. 이 경우 "테스트 머신"을 사용하여 찾고 있습니다 9d0953a7-ca2a-4667-8c5b-1a9f550b2956(대괄호 {}

수많은 검색과 테스트 끝에 얻은 결론은

$ VBoxManage list vms | awk '/Test Machine/{ sub("{" ,""); sub("}", "");  print $3 }'

9d0953a7-ca2a-4667-8c5b-1a9f550b2956 

sub작동하지만 추출하려면 명령을 사용해야합니다 .


내 질문은 단순화하는 방법이 있습니까?치환유형 연산자를 사용한 작업의 일부 or이므로 두 개의 명령을 사용할 필요가 없습니까 sub?

예를 들어, 시도해 awk '/Test Machine/{ sub("{" || "}", ""); print $3'도 작동하지 않습니다. 대괄호를 포함하여 전체 필드를 인쇄합니다.

 {9d0953a7-ca2a-4667-8c5b-1a9f550b2956}

이 문자열을 추출하는 더 좋은 방법이 있습니까?

답변1

-F awk의 필드 구분 기호입니다. 여기서는 2개의 필드 구분 기호를 사용합니다. (둘 중 하나})

VBoxManage list vms | awk -F"[{}]" '/Test Machine/{print $2}' 

답변2

다른 방법.

VBoxManage list vms | awk -F ' ' '{print substr($2, 2, length($2) - 2)}'

공백으로 필드 구분

awk -F ' '

두 번째 열을 인쇄하고 첫 번째 문자 {와 마지막 }문자를 제거합니다.

'{print substr($2, 2, length($2) - 2)}'

답변3

Gnu grep 사용(Perl 스타일 정규식 사용):

grep -Po "(?<={)[a-f0-9-]+(?=})" 

...즉, 여는 중괄호 바로 뒤에 닫는 중괄호가 오는 일련의 16진수 숫자와 대시입니다.

간단한 grep 사용

grep -Eo "([a-f0-9-]+-){4}[a-f0-9-]+"

...즉, 대시로 구분된 16진수 숫자 5개 그룹입니다.

답변4

$ VBoxManage showvminfo 'Test Machine' --machinereadable | sed -n '/^UUID=/{ s///; s/"//gp; }'
1ce7ffef-8faa-4138-9b92-466698762f62

list vms하위 명령을 사용하는 대신 showvminfo특정 시스템(여기서는 VM이라고 함)에 대한 모든 정보를 가져옵니다 Test Machine. 이를 사용하여 --machinereadable쉽게 구문 분석할 수 있는 형식으로 데이터를 출력합니다. VM UUID는 다음과 같이 출력됩니다.

UUID="1ce7ffef-8faa-4138-9b92-466698762f62"

이 명령이 감지하는 내용 sed. 해당 비트와 모든 큰따옴표를 제거한 UUID=다음 남은 내용을 인쇄합니다.

sed명령은 다양한 방법으로 작성할 수 있습니다. 예를 들어, 한 가지 변형은 다음과 같습니다.

sed -n 's/^UUID="\(.*\)"$/\1/p'

관련 정보