目前,通过管道传输到 jq 的 cat 命令帮助我解析工作目录中的多个 JSON 文件,并根据与所有文件中可用的电子邮件 ID 匹配的正则表达式模式进行筛选。但是,我热衷于识别正则表达式模式被命中/匹配的文件名
cat *.json | jq '. as $data | [path(..| select(scalars and (tostring | test("^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9.-]+$", "ixn")))) ] | map({ (.|join(".")): (. as $path | .=$data | getpath($path)) }) | reduce .[] as $item ({}; . * $item)'
Run Code Online (Sandbox Code Playgroud)
请求您帮助调整打印 $filename 的命令。谢谢!
input_filename计算结果为当前正在读取的文件的输入文件名(打开后)。对于 STDIN,其计算结果为"<stdin>":
jq 'input_filename, input_filename' <<< 1
"<stdin>"
"<stdin>"
Run Code Online (Sandbox Code Playgroud)
它与 -n 命令行选项一起使用,但仅在调用inputorinputs函数之后才有效:
jq -n 'input_filename, (input | input_filename)' <<< 1
null
"<stdin>"
Run Code Online (Sandbox Code Playgroud)