【问题标题】:How can I grep a a string with quotes and a regex?如何用引号和正则表达式 grep 字符串?
【发布时间】:2019-12-28 17:17:23
【问题描述】:

我有一个 JSON 文件,其中包含文件列表及其大小。 我正在尝试grep 仅包含 文件大小 的行,如下所示:

"filesize": 10000000

我试过单引号

grep -f files.json -o '"filesize":\s[0-9]*'

但我得到的只是这个错误(每行一次):

grep: files.json:200: Invalid range end

然后我尝试只转义双引号

grep -f files.json -o \"filesize\":\s[0-9]*

我得到同样的错误。正则表达式代码本身似乎很好,因为它可以在 Notepad++ 中工作(没有单引号),我只是无法让它在 shell 中工作。我尝试使用 bash 和 zsh。

编辑:解决它:

jq . files.json  | grep -o '"filesize":\s[0-9]*' 

【问题讨论】:

  • 如果你只是做grep -f files.json -o "filesize"?它应该给你整行
  • 或:grep -f files.json -o 'filesize:\s[0-9]*'(删除文件大小周围的“)
  • 不要使用面向行的工具来解析 JSON,使用像 jq 这样的语法感知工具
  • @Chelmy88 我都试过了,但我得到了同样的错误。
  • 你能显示文件的一部分吗?

标签: json regex shell command-line


【解决方案1】:

grep-f 标志用于指定从中读取模式的文件,而不是要处理的数据。您收到的错误是 grep 抱怨它无法将文件的某些数据解析为模式。

您可以改用以下内容:

grep -o '"filesize":\s[0-9]*' files.json

正如其他人所说,最好使用能够理解 JSON 语法的工具从 JSON 文件中提取数据,但我们需要查看数据的结构才能根据其中一种工具提供答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    相关资源
    最近更新 更多