Text-Processing
從每一行中刪除一部分 JSON 數據的命令?
我有
test.json
不同長度的行的文件。一些虛構的例子:{ a: 123, b: sd, c: x45, d: 1, e: '' } { a: 5, b: bfgg, c: x4c, d: 31, e: '' }
我想在
d
- 部分之後剪切整個子字元串,然後只為每一行返回:{ a: 123, b: sd, c: x45 } { a: 5, b: bfgg, c: x4c }
我在這裡發現了一個類似的問題,並試圖讓我的問題適應它:
echo test.json | sed 's/. d:/' > newtest.json
我需要為整個文件執行此操作,而不僅僅是一行。
sed '/d:/s/, d:[^}]*/ /' test.json
它將遍歷整個文件並在每一行上刪除
d:
所有, d:.*
部分,直到}
符號(}
符號將留在行上)。
如果您在命令行上轉換 json 做了大量工作,那麼值得您花時間獲取 jq 工具並學習使用它。
雖然上面的答案表明您可以在不實際解析 json 的情況下進行最少的轉換,但最終您將通過正則表達式重新發明一個有問題的 json 解析器,或者恢復使用您選擇的語言中的本機 json 解析器。
jq 速度快,使用簡單,是您工具箱中非常方便的工具。
BWT,您的測試數據是無效的 json,這會使上述解決方案複雜化。如果你修復它
{ "a":123 , "b": "sd", "c": "x45", "d": 1, "e": "" } { "a":5 , "b": "bfgg", "c": "x4c", "d": 31, "e": "" }
然後這個 jq 命令會想要你想要的
jq -c '{a,b,c}' test.json {"a":123,"b":"sd","c":"x45"} {"a":5,"b":"bfgg","c":"x4c"}