gpt4 book ai didi

regex - 将 cmd 输出的正则表达式结果返回到变量

转载 作者:太空宇宙 更新时间:2023-11-04 10:43:41 27 4
gpt4 key购买 nike

我期待从 cmd 输出中获取字符串(tmutil destinationinfo 的 ID)。

我用 https://regex101.com/r/aI3yH2/1 测试了这个正则表达式:

/^.*?Name.+?backup02\nKind.+?\nID?\s+:\s([A-Z0-9\-]+)/s

看起来它在工作,我正在搜索 backup01backup02、...

但是我怎样才能在 shell 脚本中获取变量的 ID?

输出是这样的:

====================================================
Name : backup02
Kind : Local
Mount Point : /Volumes/ext_backup01_02
ID : BC51C9FA-DE8A-4BA3-B23E-AEC10E9E9F69
> ==================================================
Name : backup01
Kind : Network
URL : afp://username@server02.local/backup01
Mount Point : /Volumes/backup01
ID : 009B3736-61C5-4996-B9BC-A5230BED7961
====================================================
Name : backup03
Kind : Network
URL : afp://username@server67.local/backup03
Mount Point : /Volumes/backup01
ID : 1E9A3734-33D6-1316-C9B4-B143DA35D9F2

我真的不知道该怎么办。示例代码 100% 不起作用:

#!/bin/bash
ID=$(tmutil destinationinfo | sed -E '/^.*?Name.+?backup02\nKind.+?\nID?\s+:\s([A-Z0-9\-]+)/s')
echo $ID

谢谢!

最佳答案

sed(和 grep,这将是另一个流行的正则表达式匹配器)面向行;他们一次处理一行。所以多行模式将不起作用。

您可以使用 sed 来累积行,但它不是很漂亮。如果这样做,您会发现 sed 识别的正则表达式方言与您在在线工具中使用的方言完全不同。特别是,sed 没有实现非贪婪匹配。

使用 awk 可能会做得更好:

awk -F '[[:space:]]*:[[:space:]]*' \
'$1 == "Name" && $2 == "backup02" { this_one = 1 }
this_one && $1 == "ID" { print $2; exit }'

关于regex - 将 cmd 输出的正则表达式结果返回到变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33966358/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com