我有一个 lambda,我想使用 CLI 调用它。输出中的LogResult是base64编码的数据。我试图获取“LogResult”中的日志数据,删除前后双引号,并最终对其进行解码。我目前正在使用单独的命令来完成它
$ aws lambda invoke --function-name test-lambda-function out --log-type Tail --query "LogResult" > output.log
$ sed -i 's/\"//g' output.log
$ base64 --decode output.log
但这似乎不必要地冗长。我一直在尝试通过管道传输这些命令,但显然有些问题。我尝试过以下方法
$ aws lambda invoke --function-name test-lambda-function out --log-type Tail --query "LogResult" | sed -i 's/\"//g' | base64 --decode
sed:未知选项——解码
$ aws lambda invoke --function-name test-lambda-function out --log-type Tail --query "LogResult" | tr -d '"' | base64 --decode
tr:额外操作数“|”
实现我想做的事情的最好方法是什么?
组合这些命令的最简洁方法是使用命令替换和管道。您尝试中的主要问题是将 sed 和 tr 命令与 | 混合在一起。在错误的上下文中使用管道。
这里有一句台词,应该可以完全满足您的要求:
aws lambda invoke --函数名称 test-lambda-function out --log-type Tail --query "LogResult" --输出文本 | tr -d '"' | base64 --解码
其工作原理如下:
aws lambda invoke ... --output text returns the output as plain text without the surrounding quotes.
tr -d '"' removes any remaining double quotes if necessary.
base64 --decode decodes the Base64 string to show the actual log content.
问题说明:
Using --output text with the AWS CLI removes the surrounding quotes automatically, so you don't need sed in this pipeline.
The | pipe is used correctly here to pass the result of each command to the next in sequence, without attempting to edit files directly.