sed не работает, когда он передан из другой команды sed - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь подготовить вывод для выражения grep, но когда я пытаюсь изменить данные, чтобы получить их в нужном формате, у меня возникают проблемы с получением их так, как я хочу.

Я использую следующую команду, чтобы получить список IP-адресов, которые мне нужны.

PRIV_IP=$(aws ec2 describe-instances  \
     --region "${REGION}" \
     --output text \
     --query 'Reservations[].Instances[].[PrivateIpAddress]' \
     --filters Name=tag:TagA,Values="${TagAData}" \
               Name=tag:TagB,Values="HOME" \
               Name=tag:TagC,Values="MAIN" | sed 's/\./-/g' | sed 's/ /\\|/g')

Это вывод команды;он игнорирует последний оператор sed.

echo $PRIV_IP
1-2-3-4 5-6-7-8 9-10-11-12

Если я выполняю sed вручную, он работает как задумано.

echo $PRIV_IP | sed 's/ /\\|/g'
1-2-3-4\|5-6-7-8\|9-10-11-12

Может ли кто-нибудь предоставить некоторые сведения о том, что я делаю неправильно?

1 Ответ

0 голосов
/ 31 января 2019

Возможно, ваша настоящая команда печатает TAB, но в вашем тесте они уже были преобразованы в пробел, например,

$ echo -e "A\tB"
A       B
$ echo -e "A\tB" | sed -e 's/ /X/g'
A       B
$ a=$(echo -e "A\tB"); echo $a
A B
$ echo $a | sed -e 's/ /X/g')
AXB

Решение: замените все пробелы, как предложено в комментариях, то есть

$ echo -e "A\tB" | sed -e 's/[[:space:]]/X/g'
AXB
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...