如何在 Unix 中搜索和提取字符串?

如何在 Unix 中搜索和提取字符串?

我尝试使用 Yahoo Finance 和 wget 下载数据,但在获取 cookie 和 crumb 时遇到了一些问题。在本例中我使用了 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

我不太清楚你想要得到什么或改变什么。我按照您的方式获取了该文件,并从 crumbstore.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

这是你想要的吗?

相关内容