grep/awk/sed를 사용하여 무작위 패턴을 얻는 방법

grep/awk/sed를 사용하여 무작위 패턴을 얻는 방법

문자열을 추출하려는 로그 파일이 있습니다. 숫자 문자열은 무작위로 생성되었으며 지금까지 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

관련 정보