我正在尝试使用 grep 从下面的 rds 描述-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:"
但不能
以下awk
也可能对您有所帮助。
awk 'match($0,/^"rds[^"]*/){print substr($0,RSTART+1,RLENGTH-1)}' Input_file
您的grep -Eo ",rds:"
由于各种原因而失败:
- 您没有在字符串中添加要匹配的
"
在逗号和 rds 之间匹配您需要匹配
字符。 - 您正在尝试匹配可以在上一行
上的逗号 您的示例输入是 2 行(中间有一个换行符),也许真正的输入没有换行符。 - 您希望匹配到下一个双引号。
您可以使用以下两种输入样式(带/不带换行符)
grep -Eo '(,|^)"rds:[^"]*' rdsfile |cut -d'"' -f2
您可以在一个命令中执行此操作
sed -rn 's/.*(,|^)"(rds:[^"]*).*/2/p' rdsfile
编辑:操作标准输出而不是文件是使用类似的命令:
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'