使用 shell 脚本命令从文本中提取 UUID 字符串

Extracting UUID string from a text using shell script commands

我有一个文本行:

host_id -------------------------------------- f5f4d3e7-fdc4-49f2-b32c-13280bc7db66 (1 rows)

我想使用 shell 脚本仅提取文本中的 UUID 值,因为我需要 运行 在 ubuntu 上执行此操作以使用该值执行其他一些命令。我尝试使用 cut 命令:

cut -d '-' -f2 | cut -d '(' -f1

但无法成功指定 UUID 字符串前后的 cut 字符。

在您的情况下使用 cut -d'-' 的问题是您必须添加的字段 (-f) 值不是 2,而是 38 及以上(这是连续 - 符号),因为 cut 的工作原理。如果您只设置字段 39(使用 cut -d'-' -f39),这是您将获得的输出:

f5f4d3e7

但是您想要的 UUID 字符串还包含额外的连字符,因此如果您仍想以这种方式获取它(使用 cut),您将不得不扩展您的字段选择,在这种情况下通过添加 -f39-43。但这并不能解决在它后面显示字符串 "(1 rows)" 的问题,所以通过 运行 cut -d'-' -f39-43 你会得到这个:

f5f4d3e7-fdc4-49f2-b32c-13280bc7db66 (1 rows)

这就是为什么您使用第二个 cut 过滤器来选择 UUID 值字符串的原因。虽然这没关系,但使用 awk 似乎非常方便,它将在一个命令中解决所有这些问题:

cat file.txt | awk '{ print  }'

或者如果您的字符串不是来自文件:

echo "host_id -------------------------------------- f5f4d3e7-fdc4-49f2-b32c-13280bc7db66 (1 rows)" | awk '{ print  }'