gpt4 book ai didi

bash - 用 sed 替换 aws cli 输出中的行

转载 作者:行者123 更新时间:2023-11-29 09:22:40 26 4
gpt4 key购买 nike

我编写了一个删除 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 搜索字符串中可能需要特别注意括号“()”;在这种情况下,似乎不需要搜索大型特定字符串。尝试像这样简化它并从那里增加字符串的复杂性。这在我的测试中有效,我将一个文件发送到 stdout,但是如果第二行应该适合你,你的命令可能会发送到 stderr。

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.*: //'

关于bash - 用 sed 替换 aws cli 输出中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50180029/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com