【发布时间】:2021-08-06 18:14:48
【问题描述】:
我正在编写一个小 bash 脚本来通过我们的 api 获取某些硬件的状态。
curl -sG ip:port/device/status -o temp.txt
我使用 curl 命令获取状态并写入临时文件
我尝试了不同的正则表达式类型,简单的 bash 正则表达式还不够,最终使用了 perl。
perl -nle 'printf("'%-15s' \t '%-15s' \t '%-15s' \t '%-15s' \n", "$1", "$2", "$3", "$4") while m{regex_to_capture_data}g' temp.txt
我的正则表达式捕获正在工作并且打印出来很完美(一些迭代将有空白捕获组,这是重要信息,并且按预期打印)
有没有办法让数组填充这些捕获组并在我的 bash 脚本中进一步使用它们?
例如 $1、$2、$3、$4 是字段 device_id、uptime、status、last_error。在我的 curl 命令中,我有 4 个设备的信息。我希望将 device_id[0] 设置为 [device_id[3],并且每个捕获组都相同。
我没有使用 perl 的经验,只是按照一些论坛帖子的建议使用它,因此非常感谢任何有关如何实现这一点的建议。
【问题讨论】:
-
你能像这样包装你在帖子中的整个 perl 命令吗:
bash_var=$( perl command )? -
你在 bash 中所做的一切都可以在 perl 中完成,为什么要切换语言?或者展示您在 bash 中尝试过的内容,我们可以提供帮助。 regex101.com 等工具也可以提供帮助。在最坏的情况下,如果必须,可以使用
$(perl ...)执行 perl 命令,并将输出添加到 bash 变量中。请接tour和How to Ask。 -
@mattb 将所有设备的全部输出放在一个变量中
-
@Nic3500 谢谢,我确实使用了 regex101,我遇到的问题是我在 regex101 中创建的正则表达式在 bash 正则表达式中不起作用,因为我使用了不受支持的惰性匹配,所以使用 perl 作为一种解决方法。