我正在尝试为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
有人可以提供一些关于我做错事情的信息吗?
答案 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