Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Bash脚本返回引用_Regex_Sed_Grep_Backreference - Fatal编程技术网

Regex Bash脚本返回引用

Regex Bash脚本返回引用,regex,sed,grep,backreference,Regex,Sed,Grep,Backreference,通过下面的示例文件中的bash shell模式匹配,尝试仅拾取62f0fac3-8b19-49de-866b-5f5cf23f2f9f和bd23d38d-8833-4fc4-b6c0-3906df0ed161。该文件具有单行文本,其中包含许多这样的图案引用 试回grep和sed的引用。似乎没有一个起作用。非常感谢您的帮助 "type": "Primary", "id": "418bf692-4f20-4597-b624-5a7

通过下面的示例文件中的bash shell模式匹配,尝试仅拾取62f0fac3-8b19-49de-866b-5f5cf23f2f9f和bd23d38d-8833-4fc4-b6c0-3906df0ed161。该文件具有单行文本,其中包含许多这样的图案引用

试回grep和sed的引用。似乎没有一个起作用。非常感谢您的帮助

"type": "Primary", "id": "418bf692-4f20-4597-b624-5a7242b82379", "expireIn": {"count": 0, "unit": "hours"}}], "copyModel": "ARCHIVE", "id": "6f2d6bc6-f67c-41b8-b11a-b5a59d7a6ac3"}], "id": "62f0fac3-8b19-49de-866b-5f5cf23f2f9f", "createdAt": "2020-08-11T17:33:45.754863Z", "name": "Susanta Copy Policy"}, "locked": false, "type": "Primary", "id": "ca85d285-8b73-42ec-aab1-c4d13572db94", "expireIn": {"count": 61, "unit": "days"}}], "advancedOptions": {"targetConnectivity": "Auto"}, "id": "f61e67a4-eea6-4922-9cc1-491a5429b199"}], "id": "bd23d38d-8833-4fc4-b6c0-3906df0ed161", "createdAt": "2020-07-14T19:01:33.202434Z", "name": "App Gold Policy"}, "locked": false
#
#
# cat test | grep -E '\"id\": \"(.*)\", \"createdAt\": \"'
"type": "Primary", "id": "418bf692-4f20-4597-b624-5a7242b82379", "expireIn": {"count": 0, "unit": "hours"}}], "copyModel": "ARCHIVE", "id": "6f2d6bc6-f67c-41b8-b11a-b5a59d7a6ac3"}], "id": "62f0fac3-8b19-49de-866b-5f5cf23f2f9f", "createdAt": "2020-08-11T17:33:45.754863Z", "name": "Susanta Copy Policy"}, "locked": false, "type": "Primary", "id": "ca85d285-8b73-42ec-aab1-c4d13572db94", "expireIn": {"count": 61, "unit": "days"}}], "advancedOptions": {"targetConnectivity": "Auto"}, "id": "f61e67a4-eea6-4922-9cc1-491a5429b199"}], "id": "bd23d38d-8833-4fc4-b6c0-3906df0ed161", "createdAt": "2020-07-14T19:01:33.202434Z", "name": "App Gold Policy"}, "locked": false
#
# cat test | grep -E '\"id\": \"(.*)\", \"createdAt\": \"\1'
#
# cat test | sed -E 's/\"id\"(.*)\"\, \"createdAt\": \"/\1/'
"type": "Primary", : "418bf692-4f20-4597-b624-5a7242b82379", "expireIn": {"count": 0, "unit": "hours"}}], "copyModel": "ARCHIVE", "id": "6f2d6bc6-f67c-41b8-b11a-b5a59d7a6ac3"}], "id": "62f0fac3-8b19-49de-866b-5f5cf23f2f9f", "createdAt": "2020-08-11T17:33:45.754863Z", "name": "Susanta Copy Policy"}, "locked": false, "type": "Primary", "id": "ca85d285-8b73-42ec-aab1-c4d13572db94", "expireIn": {"count": 61, "unit": "days"}}], "advancedOptions": {"targetConnectivity": "Auto"}, "id": "f61e67a4-eea6-4922-9cc1-491a5429b199"}], "id": "bd23d38d-8833-4fc4-b6c0-3906df0ed1612020-07-14T19:01:33.202434Z", "name": "App Gold Policy"}, "locked": false
#```

要使用grep,您需要Perl语法的选项
-p
。选项
-o
将仅打印匹配行的匹配(非空)部分,每个部分都在单独的输出行上

然后,您可以进行负前瞻和非贪婪匹配(这里已经很好地解释了:)。另外,为了只显示表达式的ID部分,可以包含look-around断言来删除部分grep输出(这里解释:)

总之,下面的正则表达式匹配从
“id”到
,“createdAt”
的任何内容,并断言所需的“内部”匹配不包含模式
“id”
本身(这是我理解您想要的),只返回所有“内部”匹配,每一个都在单独的行中:

cat test | grep -Po '(?<=\"id\"\: \")((?:(?!\"id\").)*?)(?=\", \"createdAt)'

谢谢你,布德马特。我还找到了另一种解决方案。但是你的更好


# cat test2 | awk -F"\", \"createdAt\": " '{for(i=1;i<=NF-1;i++)printf $i "\n" }' | while read id; do echo ${id: -36}; done
62f0fac3-8b19-49de-866b-5f5cf23f2f9f
bd23d38d-8833-4fc4-b6c0-3906df0ed161
cf4464cc-3ef7-4852-a4a0-2771538f6866
fbe16f4e-8f1c-4ffd-9d5e-86b2d2d419fb
36beae3e-208a-489e-a8ea-03f9c3e2de1b
386a08c3-35e6-4469-8b3a-7b49fd09da21
# cat test2  | grep -Po '(?<=\"id\"\: \")((?:(?!\"id\").)*?)(?=\", \"createdAt)'
62f0fac3-8b19-49de-866b-5f5cf23f2f9f
bd23d38d-8833-4fc4-b6c0-3906df0ed161
cf4464cc-3ef7-4852-a4a0-2771538f6866
fbe16f4e-8f1c-4ffd-9d5e-86b2d2d419fb
36beae3e-208a-489e-a8ea-03f9c3e2de1b
386a08c3-35e6-4469-8b3a-7b49fd09da21
#```


#cat test2 | awk-F“\”,“createdAt\”:“{for(i=1;我能确认您的示例是否为json格式吗?如果您使用的是json(尽管括号在哪里?),请使用
jq
。在sed中使用反向引用与bashThank you buddemat无关。我还找到了另一种解决方案。但是您的更好

# cat test2 | awk -F"\", \"createdAt\": " '{for(i=1;i<=NF-1;i++)printf $i "\n" }' | while read id; do echo ${id: -36}; done
62f0fac3-8b19-49de-866b-5f5cf23f2f9f
bd23d38d-8833-4fc4-b6c0-3906df0ed161
cf4464cc-3ef7-4852-a4a0-2771538f6866
fbe16f4e-8f1c-4ffd-9d5e-86b2d2d419fb
36beae3e-208a-489e-a8ea-03f9c3e2de1b
386a08c3-35e6-4469-8b3a-7b49fd09da21
# cat test2  | grep -Po '(?<=\"id\"\: \")((?:(?!\"id\").)*?)(?=\", \"createdAt)'
62f0fac3-8b19-49de-866b-5f5cf23f2f9f
bd23d38d-8833-4fc4-b6c0-3906df0ed161
cf4464cc-3ef7-4852-a4a0-2771538f6866
fbe16f4e-8f1c-4ffd-9d5e-86b2d2d419fb
36beae3e-208a-489e-a8ea-03f9c3e2de1b
386a08c3-35e6-4469-8b3a-7b49fd09da21
#```