查询使用awk / egrep提取特定的字符串

时间:2014-09-30 16:26:23

标签: bash awk amazon-ec2 grep

VOLUMES eu-west-1b  90      30              snap-54d6abac   in-use     vol-a60879a4    gp2
VOLUMES eu-west-1b  150     50              snap-8218247a   in-use     vol-6ee29c6c    gp2
VOLUMES eu-west-1b  50                      snap-8518247d   in-use     vol-76e29c74    standard
VOLUMES eu-west-1b  300     100             snap-bcef1047   in-use     vol-d22167d0    gp2
VOLUMES eu-west-1b  30                      snap-1e3ec2e6   in-use     vol-98efba9a    standard
VOLUMES eu-west-1b  24      8               snap-1b3ec2e3   in-use     vol-99efba9b    gp2
VOLUMES eu-west-1b  False   24      8       snap-1b3ec2e3   available  vol-4691b244    gp2

我有以下脚本返回上面的结果     / usr / bin / aws ec2 describe-volumes --output text | / bin / grep“VOLUME”

我试图仅提取列(8) - 即以vol -

开头的单词
/usr/bin/aws ec2 describe-volumes --output text | /bin/grep "VOLUME" | /usr/bin/awk '{ print $6 }'

我做了以下更改,但这会返回

in-use
in-use
vol-76e29c74
in-use
vol-98efba9a
in-use
in-use
vol-6591b267
vol-01c6e403
in-use
in-use
vol-0e416c0c
vol-d1f28684
vol-f7d5a2a2
vol-84f4eca8
available

因为某些行的第5列为空白 - 因此结果看起来不正确。

有人可以指出如何只提取以'vol - '

开头的字符串

我不想使用perl - 因为我不确定是否安装了库,我需要使用egrep或awk。

问候 d

2 个答案:

答案 0 :(得分:3)

向另一个方向看怎么样?

..... awk '{print $(NF-1)}'

答案 1 :(得分:0)

grep的:

grep -oE '\bvol-\S+'

对于上面的例子打印

vol-a60879a4
vol-6ee29c6c
vol-76e29c74
vol-d22167d0
vol-98efba9a
vol-99efba9b
vol-4691b244

一起greps

aws ... | grep -oP '^VOLUMES.*\K\bvol-\S+'

打印

vol-a60879a4
....
etc..