Bash

僅在文件中查找 GUID - Bash

  • January 23, 2019

我有一個可能包含 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

使用 GNU 實現grep(或兼容):

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

將在輸入中的任何位置找到這些 GUID(並且前提是它們既不在單詞字元之前也不在其後)。

GNUgrep有一個-o選項可以列印正則表達式的非空匹配項。

-w是我相信來自 SysV 的另一個非標準擴展,僅匹配整個單詞。僅當匹配的文本介於非單詞和單詞字元之間的轉換以及單詞和非單詞字元之間的轉換(其中單詞字元是字母數字或下劃線)之間時,它才匹配。這是為了防止匹配以下內容:

啊啊***啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊***啊啊

其餘的是標準的 POSIX 語法。請注意,[[:xdigit:]]ABCDEF 上的匹配項也是如此。[0123456789abcdef]如果您只想匹配小寫 GUID,可以將其替換為。

引用自:https://unix.stackexchange.com/questions/494546