我正在尝试使用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:"
但无法
答案 0 :(得分:0)
关注awk
也可以帮助您。
awk 'match($0,/^"rds[^"]*/){print substr($0,RSTART+1,RLENGTH-1)}' Input_file
答案 1 :(得分:0)
grep -Eo ",rds:"
由于各种原因而失败:
"
以匹配您可以使用
支持两种输入样式(带/不带换行符)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'