regex - 将 perl 正则表达式捕获组存储在 bash 变量中
问题描述
我正在编写一个小 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 提供了方便的操作符q()
,所以您可以轻松地解决这个问题。格式也有其他错误。可能你的意思是
perl -nle 'print(join("\t", "$1", "$2", "$3, "$4"), "\n") while m{regex_to_capture_data}g' temp.txt
您可以将其通过管道传输到
while IFS=$'\t' read -r boulders rubble stones rocks; do
...
尽管您也可以直接从 Perl 运行该循环的主体。
perl -nle 'system("geologee", "--boulders", $1, "--rubbleUrl", "$2:$3/$4") while m{regex_to_capture_data}g' temp.txt
推荐阅读
- php - HTML 和 PHP 联系表单按钮不起作用
- node.js - Prisma:创建没有日期的时间戳字段
- sql - 查找所有非常规的单引号
- alignment - 如何在 XSL-FO 中垂直对齐长表的文本底部
- text - 如何将值与 UltraEdit 上的同一列对齐?
- java - 在 Oracle 数据库中存储不同类型数据的最佳体验
- php - Laravel,composer 需要 laravel/ui,移除 laravel/framework v7.25.0
- php - 检索远程用户的 Wikipedia 搜索
- javascript - 如何从 HTML 文件中更改文本
- f# - 使用元组列表定义模式匹配函数时出现 F# 异常错误