С реализацией GNUgrep
(или совместимой):
<your-file grep -Ewo '[[:xdigit:]]{8}(-[[:xdigit:]]{4}){3}-[[:xdigit:]]{12}' |
while IFS= read -r guid; do
your-action "$guid"
sleep 5
done
Найдет эти идентификаторы GUID, где бы они ни находились во входных данных (и при условии, что им не предшествуют и не следуют словесные символы).
GNU grep
имеет опцию -o
, которая печатает не -пустые совпадения регулярного выражения.
-w
— это еще одно нестандартное расширение -, которое, как мне кажется, пришло от SysV и предназначено только для целых слов. Он соответствует только в том случае, если совпадающий текст находится между переходом между не -словом и символом слова и переходом между словом и не -символом слова (, где символы слова являются буквенно-цифровыми или символами подчеркивания ). Это делается для защиты от сопоставления таких вещей, как:
aaaaaaaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaaaaaaaaaaa
Остальное — стандартный синтаксис POSIX. Обратите внимание, что [[:xdigit:]]
совпадает и с ABCDEF. Вы можете заменить его на [0123456789abcdef]
, если хотите сопоставлять только GUID нижнего регистра.