정규식 일치를 기반으로 형식화되지 않은 파일에서 문자열을 추출하는 방법

정규식 일치를 기반으로 형식화되지 않은 파일에서 문자열을 추출하는 방법

정규식 일치 항목을 찾고 다음 숫자 문자열을 추출해야 하는 SQL 쿼리에서 반환된 형식화되지 않은 파일이 있습니다. 숫자는 두 개의 큰따옴표로 묶여 있습니다. 행당 여러 일치 항목이 발생할 수 있습니다. 파일에는 무시해야 할 다른 특수 문자가 있습니다. 샘플 파일은 다음과 같습니다.

{ "_id" : "66941672632817171654", "title" : "Some Name (Central)", "stationNameAssoc" : [ { "stationId" : "6248915749115539177", "stationName" : "Default" } ] }
{ "_id" : "4455677484649934117", "title" : "Some Name (Mountain)", "stationNameAssoc" : [ { "stationId" : "7597999415247634177", "stationName" : "Default" } ] }

여기에서 "stationId" 뒤에 따옴표를 제외하고 숫자를 추출하고 싶습니다(예: 7597999415247634177). awk나 bash를 사용하면 어떻게 할 수 있나요? 감사해요

답변1

json이라는 Json 도구를 사용합니다(https://github.com/trentm/json)

$ json -ga 'stationNameAssoc.[0].stationId' < input
6248915749115539177
7597999415247634177

또는 단계별로 사용하세요.

cat input | json -ga 'stationNameAssoc' | json -ga stationId

설명서는 다음 위치에 있습니다.http://trentm.com/json/


설치되지 않은 경우:

install node
and sudo npm install -g json

답변2

또 다른 JSON 파서 솔루션을 사용하십시오.jq:

$ jq -r '.stationNameAssoc[0].stationId' data.json
6248915749115539177
7597999415247634177

stationId이는 단순히 각 배열의 첫 번째(유일한) 배열 항목 항목의 값을 가져옵니다 stationNameAssoc.

답변3

awk -F\" '{for(i=1;i<=NF;i++)if($i~/Id/){print $(i+2);next}}' input.txt

관련 정보