解析多个 json 文件并根据正则表达式输出匹配/命中以及关联的文件名

swe*_*tha 5 filenames json jq

目前,通过管道传输到 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 的命令。谢谢!

pea*_*eak 1

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)