Получить желаемый результат с 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

Расширение параметров оболочки:

% 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
Другие вопросы по тегам