从另一个sed命令通过管道传输时,sed无法正常工作

时间:2019-01-31 07:49:14

标签: linux bash sed

我正在尝试为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 :(得分:1)

可能是您的真实命令打印了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