如何使用管道对 sed 输出进行 Base64 解码

问题描述 投票:0回答:1

我有一个 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:额外操作数“|”

实现我想做的事情的最好方法是什么?

linux unix lambda base64
1个回答
0
投票

组合这些命令的最简洁方法是使用命令替换和管道。您尝试中的主要问题是将 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.
© www.soinside.com 2019 - 2024. All rights reserved.