仅在文件中查找 GUID - Bash

Mat*_*ast 5 scripting bash shell-script wildcards

我有一个可能包含 GUID(它们的规范文本表示)的文件。

我想对文件中的每个 GUID 执行一个操作。它可能包含任意数量的 GUID。

我已经有一个可供阅读的文件。我如何发现 GUIDS?

我知道我需要使用 while read FILENAME

我的文件的一个例子:

GUIDs
--------------------------------------
cf6e328c-c918-4d2f-80d3-71ecaf09bf7b
91d523b0-4926-456e-a9d2-ade713f5b07f
(2 rows)
// THERE IS AN EMPTY LINE HERE AFTER NUMBER OF ROWS
Run Code Online (Sandbox Code Playgroud)

Sté*_*las 6

随着grep(或兼容)的 GNU 实现:

<your-file grep -Ewo '[[:xdigit:]]{8}(-[[:xdigit:]]{4}){3}-[[:xdigit:]]{12}' |
  while IFS= read -r guid; do
    your-action "$guid"
    sleep 5
  done
Run Code Online (Sandbox Code Playgroud)

将在输入中的任何位置找到这些 GUID(并且前提是它们前面和后面都没有单词字符)。

GNUgrep有一个-o选项可以打印正则表达式的非空匹配项。

-w是另一个非标准扩展,我相信来自 SysV 仅匹配整个单词。仅当匹配的文本位于非单词和单词字符之间的转换以及单词和非单词字符之间的转换之间(其中单词字符是字母数字或下划线)时,它才会匹配。这是为了防止在以下方面进行匹配:

AAAAA AAAAAAAA-AAAAAAAA-AAAA-aaaaaaaaaaaaaaaa AAAAA

其余的是标准的 POSIX 语法。请注意,[[:xdigit:]]ABCDEF上的匹配也是如此。[0123456789abcdef]如果您只想匹配小写的 GUID,您可以将其替换为。