bash - 用 sed 替换 aws cli 输出中的行
问题描述
我有一个我写的删除 AWS 快照的脚本。当快照不存在时,我想删除部分输出。
在此输出中:
Deleting unused snapshots in AWS Gov Non Prod
*****************************************************************
deleting snapshot: snap-0b571b64784bac904
An error occurred (InvalidSnapshot.NotFound) when calling the DeleteSnapshot operation: The snapshot 'snap-0b571b64784bac904' does not exist.
*****************************************************************
*****************************************************************
Verify that snapshot: snap-0b571b64784bac904 is gone:
An error occurred (InvalidSnapshot.NotFound) when calling the DescribeSnapshots operation: The snapshot 'snap-0b571b64784bac904' does not exist.
*****************************************************************
我只想删除短语:“调用DescribeSnapshots 操作时发生错误(InvalidSnapshot.NotFound):”并留下短语:快照'snap-0b571b64784bac904' 不存在。
在我的脚本中,我尝试添加 sed 以删除我不想要的内容:
aws ec2 delete-snapshot --snapshot-id=$i --profile=govcloud-nonprod | sed -e 's/An error occurred (InvalidSnapshot.NotFound) when calling the DeleteSnapshot operation: //g'
这是我的完整脚本:
#!/bin/bash
echo "Deleting unattached volumes in AWS Lab"
for i in $(cat aws_lab_volumes.txt)
do
echo "*****************************************************************"
echo "deleting volume: $i"
aws ec2 delete-volume --volume-id=$i --profile=lab | sed -e 's/An error occurred (InvalidVolume.NotFound) when calling the DeleteVolume operation: //g' 2>/dev/null
echo "*****************************************************************"
echo; echo; echo; echo; echo
sleep 5
echo "*****************************************************************"
echo "Verify that volume: $i is gone:"
aws ec2 describe-volumes --volume-ids=$i --profile=lab | sed -e 's/An error occurred (InvalidVolume.NotFound) when calling the DescribeVolumes operation: //g' 2>/dev/null
echo "*****************************************************************"
echo; echo; echo; echo; echo
done
所以基本上 sed 线失败了。如何使用 sed 删除我不想要的部分?
解决方案
确保您没有需要转义的字符,即点“。” 但是,可能需要特别注意 sed 搜索字符串中的括号“()”;在这种情况下,似乎不需要搜索大型特定字符串。尝试像这样将其简化并从那里增加字符串的复杂性。这在我的测试中有效,我将文件添加到标准输出,但是如果第二行应该适合您,您的命令可能会发送到标准错误。
aws ec2 delete-snapshot --snapshot-id=$i --profile=govcloud-nonprod | sed 's/.*DescribeSnapshots.*: //'
aws ec2 delete-snapshot --snapshot-id=$i --profile=govcloud-nonprod 2>&1 | sed 's/.*DescribeSnapshots.*: //'
推荐阅读
- powershell - PowerShell 脚本:按对象大小(以 MB 为单位)排序
- android - 格式化为
带有空格和换行符的标签 Android
- asp.net - 在 ASP.Net 的母版页中创建注销按钮
- docker - docker命令相关的查询
- c++11 - 在 solaris 11 中为 gcc 设置 c++11 std
- sql - 将 varchar 值 '(175.622313 -40.3554891)' 转换为数据类型 int 时转换失败
- ruby-on-rails - 查找 rails 项目的代码覆盖率
- kdb - kdb+ 是否支持 UNC 文件名?
- go - golang dep 更新 Gopkg.toml 中的源字段
- javascript - 当用户单击字体真棒图标时删除按钮