Unixで文字列を検索して抽出する方法は?

Unixで文字列を検索して抽出する方法は?

Yahoo Financeとwgetを使用してデータをダウンロードしようとしていますが、Cookieと削りくずを取得する際にいくつかの問題があります。この例では、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

これはあなたが望むものですか?

関連情報