regex - 将正则表达式与 grep 结合使用来过滤详细命令输出中的数据

标签 regex linux grep centos command-line-interface

我正在使用云环境,有一个命令将显示有关正在运行的虚拟机的所有可用信息。以下是与一台虚拟机相关的一些行的示例。

RESERVATION     r-6D0F464B      170506678332    GroupD
INSTANCE        i-E9B444A9      emi-376642D8    999.99.999.999  88.888.88.888   running lock_key        0               c1.xlarge       2013-06-17T18:40:56.270Z         cluster01       eki-E7E242A3                    monitoring-disabled     999.99.999.999  88.888.88.888 ebs

我需要能够提取 i-********emi-********、IP 地址、其状态、lock_keyc1.xlarge 以及禁用/启用监控。

我已经能够用一些 super 简单的正则表达式来拉整条线,但这一切都远远超出了我的能力范围。如果有其他更简单的方法来获取这些数据,欢迎提出任何建议。

最佳答案

让我们分部分来看。我能想到的最好的方法是将输出重定向到一个文件,在类 UNIX 环境中,您可以这样做:

cat your-command > filename.txt

其次,您需要逐行读取文件,如果您知道其中任何一个,我会使用 python 脚本或 perl 脚本,或者任何适合您的语言。

第三,您可以通过两种不同的方式获取值:

  1. 按位置读取列,您可以使用正则表达式获取列,例如:[^\s]+
  2. 为每个特定列编写正则表达式,因此对于 IP,您可以使用如下所示的内容:([0-9]{1,3}\.){4} 用于监控 monitoring-([^\s]+) 等。

关于regex - 将正则表达式与 grep 结合使用来过滤详细命令输出中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18018970/

相关文章:

javascript - JS - 正面展望和行尾

linux - 如何关闭 grep 行缓冲

java - 正则表达式不匹配

php - 如果重复在括号中,则可变长度后视编译。为什么?

linux - 如何使用 "sed"Bash 命令

PHP5 - 显示错误

linux - 在 Linux 上,如何仅通过 SSH 连接为 session 共享脚本?

makefile - Makefile中的Grep退出代码

linux - 显示文件中正则表达式超过 'n' 次的行

sql - 不区分大小写的搜索/查询