我正在尝试使用 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
版本和操作系统平台的更多详细信息,这是温和的推测; 但是您尝试使用的正则表达式格式可能是错误的。若要将xa
或x(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
手册页。