我有一个包含不动产记录的 20GB JSON 文件。
示例片段
{"id":2545,"name":"No cribs (infant beds) available"},{"description": "Here is some text with a <a href=\"stupidurl.com\">click here</a>"}
我正在尝试在 bash 中使用 WHILE 循环来逐行读取文件并仅将我想要的数据提取到一个新的较小文件中以供以后处理。
while read line; do
#All this If Statement does is look for a pattern to identify the line I want to save
if [[ ($line == *"\"country_code\":\"US\","* ]]; then
echo $line >> $JSON_FILE_FILTERED
fi
done < $JSON_FILE
我的问题是 echo 语句删除了转义引号。
href=\"mylink\"
变成...
href="mylink"
...在导致JQ 解析错误的新JSON 文件中。
我需要删除 JSON 方括号内的双引号,或者在将转义引号写入新文本文件时生成回显语句以保留转义引号。
我已经尝试了 sed、tr 等的各种迭代。echo -e 和 printf。主要是我运气不好。
现在我可以用...删除标签之间的所有内容
echo $line | sed -e 's/<[^>]*>//g' >> $JSON_FILE_FILTERED
...这有点管用,但它不会更正数据括号内的其他双引号
{"description": "Here is some text with \"Some Big Guy's\" hat"}
{"description": "Here is some text with "Some Big Guy's" hat"}
最佳答案
删除反斜杠的不是echo
命令,而是read
命令。
请尝试:
while IFS= read -r line; do
if [[ $line == *"\\\"country_code\\\":\\\"US\\\","* ]]; then
echo "$line" >> "$JSON_FILE_FILTERED"
fi
done < "$JSON_FILE"
- 您需要将
-r
选项添加到read
以保留反斜杠 作为生产线的一部分。 - 在 [[ 和 ] 之间有一个不必要的左括号
(
。(打字错误?) - 您需要转义 [[ 和 ] 之间的反斜杠。
- 您需要用双引号将变量括起来。
然而,使用bash脚本读取20GB的文件仍然是低效的。
最好说:
grep -F '"\"country_code\":\"US\","' file.json > filtered.json
希望这对您有所帮助。
关于json - 在 bash 脚本中,如何删除 JSON 数据集 {} 中双引号之间的所有双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58274983/