簡體   English   中英

來自 txt 文件的 Grep(JSON 格式)

[英]Grep from txt file (JSON format)

我有一個 JSON 格式的 txt:

{
  "items": [ {
    "downloadUrl" : "some url",
    "path": "yxxsf",
    "id" : "abc",
    "repository" : "example",
    "format" : "zip",
    "checksum" : {
      "sha1" : "kdhjfksjdfasdfa",
      "md5" : "skjfhkjshdfkjshfkjsdhf"
    }
  }],
  "continuationToken" : null
}

我想使用 grep 提取下載 url 上下文(在本例中我想要“一些 url”)並將其存儲在另一個 txt 文件中。 TBH 我從未使用過 grep

使用grep

grep -oP 'downloadUrl"\s:\s"(.*)",' myfile > urlFile.txt

看到這個正則表達式在行動: https : //regex101.com/r/DvnXCO/1


更好的方法是使用jq

下載 Windows 版jqhttps : //stedolan.github.io/jq/download/

jq ".items[0].downloadUrl" myfile > urlFile.txt

盡管 json string可能包含由反斜杠轉義的雙引號字符,但 URL 中的雙引號和反斜杠都應根據 RFC 3986 進行百分比編碼。然后您可以使用以下命令提取 URL:

tr "[:space:]" " " < file.json | grep -Po '"downloadUrl"\s*:\s*\K"[^"]+"'
  • 讓我使用tr對 json 文件進行預處理以將所有blank字符轉換為空格。 如果名稱和值對位於單獨(但連續)的行中,則以下grep將起作用。
  • 正則表達式中的\\K運算符是一個可變長度的后視,在匹配結果中不包括前面的模式。

請注意,上面的命令適用於提供的示例,但對於任意輸入可能不夠健壯。 我仍然建議將jq用於嚴格的目的。

如果您只想使用 grep:

grep downloadURL myfile > new_file.txt

如果您更喜歡更簡潔的選項,請添加cut命令:

grep downloadURL myfile | cut -d\" -f4 > new_file.txt

順便說一句,json 文件的圖像顯示您正在使用記事本(Windows?)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM