为什么我的jq / read / echo管道删除反斜杠?

用户名

我正在尝试将一个大型JSON文件(〜4个Mio元素)拆分为单独的文件(每个元素一个文件)。

该文件有点像这样:

{
  "books": [
    {
      "title": "Professional JavaScript - \"The best guide\"",
      "authors": [
        "Nicholas C. Zakas"
      ],
      "edition": 3,
      "year": 2011
    },
    {
      "title": "Professional JavaScript",
      "authors": [
        "Nicholas C.Zakas"
      ],
      "edition": 2,
      "year": 2009
    },
    {
      "title": "Professional Ajax",
      "authors": [
        "Nicholas C. Zakas",
        "Jeremy McPeak",
        "Joe Fawcett"
      ],
      "edition": 2,
      "year": 2008
    }
  ]
}

要将每本书分成一个单独的文件,我使用以下命令:

cat books.json | jq -c -M '.books[]' | while read line; do echo $line > temp/$(date +%s%N).json; done

对于最后两项,一切正常,因为书名不包含任何引号。但是,在第一个中,使用\"get替换"将导致损坏的JSON文件,因为后续的解析器-当然-将解释"为元素的边界。

我尝试使用jq -r,但这没有帮助。

我正在使用CentOS 7附带的jq版本:

[root@machine]$ jq --version
jq-1.6

有什么建议?

本杰明W.

您必须使用以下-r选项read

while read -r line; do echo "$line" > temp/"$(date +%s%N)".json; done

它防止解释反斜杠转义符。

并且您应该引用您的变量。

看到不同:

$ read var <<< 'quoted quotes: \"\"'
$ echo "$var"
quoted quotes: ""
$ read -r var <<< 'quoted quotes: \"\"'
$ echo "$var"
quoted quotes: \"\"

使用-rwithread几乎总是您想要的,实际上应该是默认的行为。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么read_csv()不解析我的日期?

来自分类Dev

为什么我不能删除文件?

来自分类Dev

为什么sed删除我的标题行?

来自分类Dev

为什么我的BufferedInputStream.read()无法接收-1?

来自分类Dev

如何在外壳中使echo或printf忽略双反斜杠(\\)并按我看到的方式打印

来自分类Dev

为什么我不能在postgres反斜杠命令(\ COPY)中使用变量

来自分类Dev

为什么要删除我的班级名称?

来自分类Dev

为什么此JSON对象返回反斜杠?我该如何摆脱它们?

来自分类Dev

为什么我必须删除Docker容器?

来自分类Dev

为什么Visual Studio消除了我的反斜杠字符串

来自分类Dev

为什么在我的JSON输出中像一串反斜杠

来自分类Dev

为什么这个Haskell程序反斜杠?

来自分类Dev

为什么sshd删除我的/ dev / zero?

来自分类Dev

为什么`echo -e“ \\\ SOME_TEXT”`只显示一个反斜杠?

来自分类Dev

为什么单反斜杠变成双反斜杠

来自分类Dev

为什么sed无法删除我的空行?

来自分类Dev

为什么.text()。replace()删除我的html?

来自分类Dev

为什么我的管道出现故障?

来自分类Dev

jQuery为什么不删除我的课程?

来自分类Dev

为什么我的命名管道不断被修改?

来自分类Dev

为什么grep需要双反斜杠?

来自分类Dev

为什么在System.in.read()函数之后我的程序停止?

来自分类Dev

为什么len(file.read())给我零值?

来自分类Dev

jq +从json文件中打印属性,而无需删除必要的反斜杠

来自分类Dev

为什么在用反斜杠转义“ $”字符时,echo命令不需要“ -e”选项

来自分类Dev

为什么我的while(read)与管道循环永远不会结束?

来自分类Dev

在本例中,为什么bash在引号删除步骤中不删除反斜杠?

来自分类Dev

我不明白为什么在 php 代码的扩展类中使用反斜杠

来自分类Dev

为什么我在 python 字符串中得到一个反斜杠

Related 相关文章

  1. 1

    为什么read_csv()不解析我的日期?

  2. 2

    为什么我不能删除文件?

  3. 3

    为什么sed删除我的标题行?

  4. 4

    为什么我的BufferedInputStream.read()无法接收-1?

  5. 5

    如何在外壳中使echo或printf忽略双反斜杠(\\)并按我看到的方式打印

  6. 6

    为什么我不能在postgres反斜杠命令(\ COPY)中使用变量

  7. 7

    为什么要删除我的班级名称?

  8. 8

    为什么此JSON对象返回反斜杠?我该如何摆脱它们?

  9. 9

    为什么我必须删除Docker容器?

  10. 10

    为什么Visual Studio消除了我的反斜杠字符串

  11. 11

    为什么在我的JSON输出中像一串反斜杠

  12. 12

    为什么这个Haskell程序反斜杠?

  13. 13

    为什么sshd删除我的/ dev / zero?

  14. 14

    为什么`echo -e“ \\\ SOME_TEXT”`只显示一个反斜杠?

  15. 15

    为什么单反斜杠变成双反斜杠

  16. 16

    为什么sed无法删除我的空行?

  17. 17

    为什么.text()。replace()删除我的html?

  18. 18

    为什么我的管道出现故障?

  19. 19

    jQuery为什么不删除我的课程?

  20. 20

    为什么我的命名管道不断被修改?

  21. 21

    为什么grep需要双反斜杠?

  22. 22

    为什么在System.in.read()函数之后我的程序停止?

  23. 23

    为什么len(file.read())给我零值?

  24. 24

    jq +从json文件中打印属性,而无需删除必要的反斜杠

  25. 25

    为什么在用反斜杠转义“ $”字符时,echo命令不需要“ -e”选项

  26. 26

    为什么我的while(read)与管道循环永远不会结束?

  27. 27

    在本例中,为什么bash在引号删除步骤中不删除反斜杠?

  28. 28

    我不明白为什么在 php 代码的扩展类中使用反斜杠

  29. 29

    为什么我在 python 字符串中得到一个反斜杠

热门标签

归档