我发现大量的线程讨论过“如何grep json值”。 但遗憾的是我和所有使用grep from busybox(嵌入式linux)的人都没用。此grep版本没有选项“-P”(perl exp)。只有“-E”(扩展正则表达式)可用。
BusyBox v1.20.2 () multi-call binary.
Usage: grep [-HhnlLoqvsriwFE] [-m N] [-A/B/C N] PATTERN/-e PATTERN.../-f FILE [FILE]...
Search for PATTERN in FILEs (or stdin)
-H Add 'filename:' prefix
-h Do not add 'filename:' prefix
-n Add 'line_no:' prefix
-l Show only names of files that match
-L Show only names of files that don't match
-c Show only count of matching lines
-o Show only the matching part of line
-q Quiet. Return 0 if PATTERN is found, 1 otherwise
-v Select non-matching lines
-s Suppress open and read errors
-r Recurse
-i Ignore case
-w Match whole words only
-x Match whole lines only
-F PATTERN is a literal (not regexp)
-E PATTERN is an extended regexp
-m N Match up to N times per file
-A N Print N lines of trailing context
-B N Print N lines of leading context
-C N Same as '-A N -B N'
-e PTRN Pattern to match
-f FILE Read pattern from file
我有一个json示例:
{
"one": "apple",
"two": "banana"
}
现在,我想提取值,例如关键“一”的“苹果”。
grep -E '".*?"' file.json
只是一个例子,它应该是什么样子。
顺便说一句:如何从正则表达式访问组?
如果有任何帮助或替代方案,我将不胜感激。
答案 0 :(得分:2)
使用 <?xml version="1.0"?>
<t t-name="account.report_invoice">
<t t-call="report.html_container">
<t t-foreach="doc_ids" t-as="doc_id">
<t t-raw="translate_doc(doc_id, doc_model, 'partner_id.lang', 'account.report_invoice_document')"/> </t> </t>
</t>
:
busybox awk
busybox awk -F '[:,]' '/"one"/ {gsub("[[:blank:]]+", "", $2); print $2}'
将字段分隔符设置为-F '[:,]'
或:
,
,则 /"one"/ {gsub("[[:blank:]]+", "", $2); print $2}
会出现问题,如果是,则从第二个字段中删除所有水平空格,然后打印字段
如果你想剥去引号:
"one"
示例:强>
busybox awk -F '[:,]' '/"one"/ {gsub("[[:blank:]\"]+", "", $2); print $2}'
答案 1 :(得分:0)
我喜欢简单的命令,这些命令增强了可读性并且易于理解。首先,我们必须删除空格以匹配字符串。为此,我通常更喜欢sed
命令。之后我们可以使用awk
命令查找匹配项。
awk -F: '$1=="one" {print $2}' | sed -r 's/(\t|\s|,)//g' file.json
它将返回:
"apple"
注意:我删除了存在于行尾的逗号(,)。如果您还需要逗号作为输出,请参阅以下命令。
awk -F: '$1=="one" {print $2}' | sed -r 's/(\t|\s)//g' file.json
它将返回:
"apple",
答案 2 :(得分:0)
awk 如果单行 json
解决方案将不起作用示例:
{"one":"apple","two":"banana"}
遵循 sed 可以:
busybox cat file.json | sed -n 's/.*"one":\([^}, ]*\).*/\1/p'