【问题标题】:Extracting UUID string from a text using shell script commands使用 shell 脚本命令从文本中提取 UUID 字符串
【发布时间】:2020-06-04 12:55:23
【问题描述】:

我有一个文本行:

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

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

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

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

【问题讨论】:

    标签: shell parsing text uuid cut


    【解决方案1】:

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

    f5f4d3e7
    

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

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

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

    cat file.txt | awk '{ print $3 }'
    

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

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

    【讨论】:

    • 感谢@hads0m!字符串 | awk '{ print $3 }' 非常适合我的情况。我应该注意到 ----- 和 f5f4 之间的空格...另外,感谢您解释 cut -d 的工作原理。
    猜你喜欢
    • 1970-01-01
    • 2020-03-08
    • 2012-07-01
    • 1970-01-01
    • 2019-11-02
    • 1970-01-01
    • 2022-01-22
    • 2019-04-14
    • 1970-01-01
    相关资源
    最近更新 更多