使用 gawk/awk 获取所需输出

使用 gawk/awk 获取所需输出

我运行以下命令:

aws ec2 describe-instances --filters "Name=ip-address,Values=MY_IP" | grep InstanceId 

我得到:

"InstanceId": "i-b0f13081",

我怎样才能仅获得以下内容:

i-b0f13081

这是我尝试过的:

 aws ec2 describe-instances --filters "Name=ip-address,Values=MY_IP" | grep InstanceId | gawk -F: '{ print $2 }' 
 "i-b0f13081", 

答案1

awk

设置"为字段分隔符,并获取第4个字段:

% awk -F'"' '{print $4}' <<<'"InstanceId": "i-b0f13081",'
i-b0f13081

相似地cut

% cut -d'"' -f4 <<<'"InstanceId": "i-b0f13081",'
i-b0f13081

grep使用 PCRE( -P):

% grep -Po ':\s*"\K[^"]+' <<<'"InstanceId": "i-b0f13081",'
i-b0f13081

Shell参数扩展:

% var='"InstanceId": "i-b0f13081",'
% var="${var%\"*}"
% echo "${var##*\"}"
i-b0f13081

sed

% sed -E 's/^[^:]+:[^"]+"([^"]+).*/\1/' <<<'"InstanceId": "i-b0f13081",'
i-b0f13081

perl

% perl -pe 's/^[^:]+:[^"]+"([^"]+).*/$1/' <<<'"InstanceId": "i-b0f13081",'
i-b0f13081

python

% python -c 'import sys; print sys.stdin.read().split("\"")[3]' <<<'"InstanceId": "i-b0f13081",'
i-b0f13081

相关内容