【发布时间】:2019-01-31 07:49:13
【问题描述】:
我正在尝试为 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
有人可以就我做错了什么提供一些意见吗?
【问题讨论】:
-
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之前的输出是什么 -
只有 IP 带有 .'s 而不是 -'s 和它们之间的空格
-
交换两个 sed 命令会发生什么?他们似乎并不相互依赖。或者,如果您将它们链接到一个命令中?
sed -e 's/\./-/g' -e 's/ /\\|/g'? -
你试过
s/[[:space:]]/\\|/g来替换空格吗?你确定这只是空格吗? IE。 hexdump 原始值 -
仅供参考:对于多个表达式,您不需要多个 sed 命令。只需用
;将它们分开,例如sed -e 's/\./-/g;s/[[:space:]]/\\|/g'