grep在单词之间返回字符串

时间:2018-05-07 13:28:47

标签: bash amazon-web-services grep amazon-rds

我正在尝试使用grep从下面的rds describe-db-snapshots命令输出中过滤出RDS快照标识符:

"arn:aws:rds:ap-southeast-1:123456789:snapshot:rds:apple-pie-2018-05-06-17-12",
"rds:apple-pie-2018-05-06-17-12",

如何在

中返回确切的输出
rds:apple-pie-2018-05-06-17-12

尝试使用

grep -Eo ",rds:" 

但无法

2 个答案:

答案 0 :(得分:0)

关注awk也可以帮助您。

awk 'match($0,/^"rds[^"]*/){print substr($0,RSTART+1,RLENGTH-1)}'   Input_file

答案 1 :(得分:0)

grep -Eo ",rds:"由于各种原因而失败:

  • 您没有在字符串中添加"以匹配
    在逗号和rds之间,你需要匹配角色。
  • 您正在尝试匹配前一行上可用的逗号
    您的示例输入是2行(中间有换行符),也许实际输入没有换行符。
  • 您希望匹配到下一个双引号。

您可以使用

支持两种输入样式(带/不带换行符)
grep -Eo '(,|^)"rds:[^"]*' rdsfile |cut -d'"' -f2

您可以使用

在一个命令中执行此操作
sed -rn 's/.*(,|^)"(rds:[^"]*).*/\2/p' rdsfile

编辑:manipulting stdout而不是文件使用类似的命令:

yourcommand | grep -Eo '(,|^)"rds:[^"]*' |cut -d'"' -f2
# or
yourcommand | sed -rn 's/.*(,|^)"(rds:[^"]*).*/\2/p'

您还可以使用yourcommand > rdsfile测试原始命令 您可能会注意到rdsfile缺少您在屏幕上看到的数据,在这种情况下添加2>&1

yourcommand 2>&1 | grep -Eo '(,|^)"rds:[^"]*' |cut -d'"' -f2
# or
yourcommand 2>&1 | sed -rn 's/.*(,|^)"(rds:[^"]*).*/\2/p'