【问题标题】:In a bash script, how to I remove all double quotes within a JSON data set {}, between the double quotes在 bash 脚本中,如何在双引号之间删除 JSON 数据集 {} 中的所有双引号
【发布时间】:2019-10-08 08:38:41
【问题描述】:

我有一个包含不动产记录的 20GB 大型 JSON 文件。

示例 sn-p

{"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"}

【问题讨论】:

  • shellcheck 指出没有-rreadmangle backslashes
  • 尝试使用 'jq' 处理 JSON 文件。文件大小可能是一个挑战,但除非您确定输入是如何分成几行的,否则很难编写一个 bash 阅读器。如果您知道输入打印得很漂亮,bash
  • 可以分享需要提取的示例行吗?

标签: json linux bash


【解决方案1】:

删除反斜杠的不是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

希望这会有所帮助。

【讨论】:

  • 非常感谢。通过在我的 while 循环中使用 read -r,这让我朝着正确的方向前进。我不需要将 grep 用于辅助过滤器文件,因为在 while 循环中逐行读取而不是值/键对会大大加快处理速度。
  • @LanceWig 很高兴知道它有帮助。如果您对我的回答感到满意,请您点击答案旁边的复选标记接受它吗? BR。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-20
  • 2021-07-03
  • 2013-12-10
相关资源
最近更新 更多