使用 sed 删除多个 AWS 错误



我正在尝试使用 sed 消除某些 AWS 命令输出中的几个可能错误。

以删除快照命令为例,这是我尝试使用的命令:

aws ec2 delete-snapshot --snapshot-id=snap-0f33096478a77c --profile=go
vcloud-admin-nonprod 2>&1 | sed -e 's/An error occurred (InvalidSnapshot.((NotFound|InUse|Malformed)) when calling the DeleteSnapshot operation: //g'

错误 1

An error occurred (InvalidSnapshotID.Malformed) when calling the DeleteSnapshot operation: Value ( snap-0f33096478a77c ) for parameter SNAPSHOT is invalid.

重试并出现其他错误:

aws ec2 delete-snapshot --snapshot-id=snap-02e5e9386fef2aaa9 --profile=govcloud-admin-nonprod 2>&1 | sed -e 's/An error occurred (InvalidSnapshot.((NotFound|InUse|Malformed)) when calling the DeleteSnapshot operation: //g'

错误 2:

An error occurred (InvalidSnapshot.NotFound) when calling the DeleteSnapshot operation: The snapshot 'snap-02e5e9386fef2aaa9' does not exist.

上次尝试其他错误:

aws ec2 delete-snapshot --snapshot-id=snap-0f33082478a77c --profile=go
vcloud-admin-nonprod 2>&1 | sed -e 's/An error occurred (InvalidSnapshot.((NotFound|InUse|Malformed)) when calling the DeleteSnapshot operation: //g'

错误 3:

An error occurred (InvalidSnapshot.InUse) when calling the DeleteSnapshot operation: The snapshot snap-0f33096478a77c532 is currently in use by ami-d4128aae

我试图做的是删除所有文本,除了最后一部分,说明快照是否存在等。例如,代替此输出:

调用 DeleteSnapshot 操作时发生错误 (InvalidSnapshot.NotFound(:快照"snap-02e5e9386fef2aaa9"不存在。

我只想保留这部分:

The snapshot 'snap-02e5e9386fef2aaa9' does not exist.

由于某种原因,我使用的 sed 行不会抑制我想要的输出。有人可以帮助我使用正确的语法来完成此操作吗?

我认为问题在于我如何形成这条线:

(InvalidSnapshot.((NotFound|InUse|Malformed))

如果没有关于您的精确sed版本和操作系统平台的更多详细信息,这是温和的推测; 但是您尝试使用的正则表达式格式可能是错误的。若要将xax(b)替换为任何内容,通常可以使用以下语法:

sed -e 's/x(a|(b))//'
sed -E 's/x(a|(b))//'
sed -r 's/x(a|(b))//'

-E-r选项是非标准的,在您的版本中可能根本不存在。在它确实存在的地方,它选择扩展(egrep(正则表达式语法,而不是相当原始的传统sed正则表达式语法,这是POSIX所谓的基本正则表达式的变体。特别要注意分组括号和交替栏前面需要反斜杠;没有反斜杠,它们只是从字面上匹配自己。在 ERE 中,它们是正确的正则表达式元字符,您需要反斜杠转义才能逐字匹配它们。

最后,请查看您当地的sed手册页。

最新更新