문자열을 추출하려는 로그 파일이 있습니다. 숫자 문자열은 무작위로 생성되었으며 지금까지 grep/sed/awk를 사용한 모든 시도는 실패했습니다.
다음과 같은 항목이 있습니다.
"id":"30c962de-b448-40ac-ade8-da6a8f49ce88","title":
내가 분석하려는 것은 무작위로 생성된 부분입니다.
30c962de-b448-40ac-ade8-da6a8f49ce88
이 작업을 수행하는 빠르고 더러운 방법이 있는 사람이 있습니까?
답변1
너무 빠르고 더러운가요?
$ grep -o -P '(?<=")[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}(?=")' input
30c962de-b448-40ac-ade8-da6a8f49ce88
"30c962de-b448-40ac-ade8-da6a8f49ce88"
고정된 길이와 대시 위치(따옴표로 묶음)가 있는 임의의 값을 찾아 -
인쇄합니다. 해당 섹션도 고집하고 싶다면 "id":
기본 제안 조건에 추가하세요 (?<=")
.
jq
그러나 이것이 JSON이거나 일반 데이터인 경우 해당 데이터(예: 기타 데이터) 를 처리하기 위해 적절한 구문 분석기를 사용하는 것을 고려해야 합니다 .
답변2
제공된 입력에 AWK를 사용하는 또 다른 더러운 트릭입니다.
data='"id":"30c962de-b448-40ac-ade8-da6a8f49ce88","title":
echo $data | awk -F , '{ print $1}' | awk -F id: '{print $1}' | awk '{print $1}'
"30c962de-b448-40ac-ade8-da6a8f49ce88"
답변3
이것이 실제로 JSON 문서인 경우 다음을 jq
사용하면 데이터 형식에 관계없이 문자열을 가져옵니다.
jq -r '.document[2].part.id' file.json
id
이는 키가 JSON 데이터 구조의 최상위 배열에 있는 특정 요소의 일부인 part
개체 의 일부라고 가정합니다 .document
또는 직접 추출할 수도 있습니다.모두 id
값:
jq -r '.. | select(type=="object" and has("id")) | .id' file.json
답변4
사용 awk
:
awk -F"[\":]" '{ print $5 }' infile