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