Unix에서 문자열을 검색하고 추출하는 방법은 무엇입니까?

Unix에서 문자열을 검색하고 추출하는 방법은 무엇입니까?

Yahoo Finance 및 wget을 사용하여 데이터를 다운로드하려고 하는데 쿠키와 부스러기를 가져오는 데 몇 가지 문제가 있습니다. 이 예에서는 BTC-USD를 사용하고 "crumbstore.txt"라는 파일에 부스러기 데이터를 저장했습니다.

wget --no-check-certificate --save-cookies=cookie.txt "https://finance.yahoo.com/quote/BTC-USD/history?p=BTC-USD" -O crumbstore.txt

여기에서 탐색경로 문자열을 추출하여 아래 표시된 참조 링크($crumb)에 삽입하려고 합니다. 이 예시의 기간은 2017-01-01부터 2020-01-06까지입니다.

wget --no-check-certificate --load-cookies=cookie.txt "https://query1.finance.yahoo.com/v7/finance/download/BTC-USD?period1=1483265281&period2=1578305313&interval=1d&events=history&crumb=$crumb" -O BTC-USD_price.csv

"crumbstore.txt" 파일의 구조를 보기 위해 grep을 사용하여 다음 코드를 실행했습니다.

grep -o ".\{0,50\}CrumbStore.\{0,50\}" crumbstore.txt

내가 얻어야 할 것은 "CrumbStore":{"crumb":"에 저장된 일련의 문자와 숫자라는 것을 알 수 있습니다.XXXXXXXXXXXX"}.

이것은crumbstore.txt의 조각이며 기본 작업은 "BdpohsJbyt"를 추출하는 것입니다. 본문으로 판단하면.

"secondary_accounts":{"list":"Pos(r) M(0) P(0) List(n)","list_item":"Bdt(asMenuBorder)","anchor":"Td(n) Td(n):h Py(16px) D(b) Cf C(#000) Bgc(asMenuHoverBgc):h"}}}}},"CrumbStore":{"crumb":"BdpohsJbyt."},"StreamStore":{"articleCategory":{"term":"","label":""}

답변1

귀하의 데이터는 JSON 형식인 것으로 보이며 올바른 도구를 설치하는 것보다 더티 해킹이 더 널리 사용되는 매우 제한적인 환경에서 작업하지 않는 한 jq저장소에서 사용 가능한 대부분의 배포판에 설치하여 사용해야 합니다.

실제 데이터를 보지 않고는 올바른 jq 호출을 작성하는 것이 불가능합니다.

답변2

문자열 앞과 뒤의 모든 것을 제거하는 것은 어떻습니까?

sed -n 's/^.*crumb":"//; s/".*$//p' crumb.store
XXXXXXXXXXX

답변3

나는 당신이 무엇을 얻고 싶은지, 무엇을 바꾸고 싶은지 잘 모르겠습니다. 나는 당신이 했던 방식으로 파일을 얻었고 crushstore.txt 파일에서 필요할 수 있는 문자열을 추출했습니다.

cat crumbstore.txt | grep -oE 'cru.\w*.:.{13}' | grep -Ev '{|pf'

결과는 다음과 같습니다.

    crumb":"q7md5ctTst0"
    crumb":"WvBqKN8S0E5"
    crumb":"q7md5ctTst0"
    crumb":"q7md5ctTst0"
    crumb":"q7md5ctTst0"

따옴표에서 11개의 문자열을 추출하려면 awk를 사용했습니다.

cat crumbstore.txt | grep -oE 'cru.\w*.:.{13}' | grep -Ev '{|pf' | awk -F'"' '{print $3}'

결과는 다음과 같습니다.

    q7md5ctTst0
    WvBqKN8S0E5
    q7md5ctTst0
    q7md5ctTst0
    q7md5ctTst0

이것이 당신이 원하는 것입니까?

관련 정보