OpenStack命令(例如cinder create、nova boot、glance image-create)输出关于新卷/实例/映像的详细信息表。
$ cinder create --image 3896b01c-6afb-41a4-a207-3db87527be2c --display-name centos7-cloud 30
+---------------------+--------------------------------------+
| Property | Value |
+---------------------+--------------------------------------+
| attachments | [] |
| availability_zone | nova |
| bootable | false |
| created_at | 2017-01-12T10:58:00.782361 |
| display_description | None |
| display_name | centos7-cloud |
| encrypted | False |
| id | d1c6369b-73ce-498e-a2ef-2c6cea1d0f90 |
| image_id | 3896b01c-6afb-41a4-a207-3db87527be2c |
| metadata | {} |
| size | 30 |
| snapshot_id | None |
| source_volid | None |
| status | creating |
| volume_type | None |
+---------------------+--------------------------------------+我正在创建一个shell脚本,其中下一个命令通过id引用新卷(在变量CINDER_ID中)。
nova boot --block-device source=volume,id=${CINDER_ID},dest=volume centos将id提取到变量的最佳方法是什么?
发布于 2017-01-12 11:52:34
下面的解决方案使用GNU grep,它支持环顾四周。
grep -owP 'id.*\|\s\K.*[^\|]+' inputfile
d1c6369b-73ce-498e-a2ef-2c6cea1d0f90将其存储到变量:
id=$(grep -owP 'id.*\|\s\K.*[^\|]+' inputfile)你可以试试:
id=$(cinder create --image 3896b01c-6afb-41a4-a207-3db87527be2c --display-name centos7-cloud 30 |grep -owP 'id.*\|\s\K.*[^\|]+' )发布于 2017-01-12 11:36:09
使用GNU awk's,根子函数,您可以执行以下操作。下面的逻辑中的函数,从列2,3字段中移除前导和尾随空格--由|分隔。
(将表写入文件时检查)
awk -F"|" 'gensub(/^[ \t]+|[ \t]+$/,"","g",$2)=="id"{print gensub(/^[ \t]+|[ \t]+$/,"","g",$3);}' file
d1c6369b-73ce-498e-a2ef-2c6cea1d0f90要将它存储在变量中,
idValue="$(awk -F"|" 'gensub(/^[ \t]+|[ \t]+$/,"","g",$2)=="id"{print gensub(/^[ \t]+|[ \t]+$/,"","g",$3);}' file)"
printf "%s\n" "$idValue"
d1c6369b-73ce-498e-a2ef-2c6cea1d0f90您可以将生成上表的命令管道到此Awk,如
<your-command> | awk '{..}'就像,
cinder create --image 3896b01c-6afb-41a4-a207-3db87527be2c --display-name centos7-cloud 30 \
| awk -F"|" 'gensub(/^[ \t]+|[ \t]+$/,"","g",$2)=="id"{print gensub(/^[ \t]+|[ \t]+$/,"","g",$3);}'
d1c6369b-73ce-498e-a2ef-2c6cea1d0f90发布于 2017-01-12 11:54:35
您可以使用\s*\|\s*作为字段分隔符。
CINDER_ID=$(cinder create --image 3896b01c-6afb-41a4-a207-3db87527be2c --display-name centos7-cloud 30 |
awk 'BEGIN{FS="\\s*\\|\\s*"}$2=="id"{print $3}')
echo $CINDER_ID你会得到
d1c6369b-73ce-498e-a2ef-2c6cea1d0f90https://stackoverflow.com/questions/41611932
复制相似问题