在 Linux 上,我有文本文件,每个文件包含 1 或 2 个 base64 代码块。以下是文件的一部分和 1 个 base64 块。
内容传输编码:base64
RGVhciBMdWlzLA0KICANCkdvb2QgbW9uaW5nIQ0KT3VyIEJhbmsgYWNjb3VudCBpcyB1bmRlcmdvaW5nIGF1ZGl0IGZvciB0aGUgZmlzY2FsIHllYXIgYXMgcmVxdWlyZWQgYnkgdGhlIGNoaW5hIGZvcm VpZ24gY3VycmVuY3kgY29udHJvbCBwb2xpY3kgYW5kIHRoZSBhY2NvdW50IHdpbGwgbm90IGJlIGF2YWlsYWJsZSB1bnRpbCB0aGUgQ2hpbmVzZSB0YXggYnVyZWF1cyBhcmUgc 2F0aXNma WVkIHRoYXQgYWxsIGFwcGxpY2FibGUgdGF4ZXMgaGF2ZSBiZWVuIHBhaWQgdXAuIFBsZWFzZSBob2xkIHBheW1lbnQgc28gaSBjYW4gZnVybmlzaCB5b3Ugd2l0aCBvdXIgcmV2aXNlZCBiYW5raw5 nIGluZm9ybWF0aW9uLiAgDQonCiagDQpCZXN0IHJlZ2FyZHMNCiANCKRhdmlk
------=_Part_143209_644876817.1451544132767--
我可以使用哪个命令从文件中提取第一个 base64?
我的目标是将输出解码为可读
文件解码命令示例:https://superuser.com/a/663397
短语解码命令示例:https://askubuntu.com/a/178546
我不知道如何仅提取代码的 Base64 部分,或者如果它包含两个 Base64,则仅提取第一个。我可以使用sed
or awk
,但我不知道如何假设我会查找:
- 64位基数
- ------=_部分_
修剪空白行,我就得到了 Base64 但是如果有 2 个 Base64 部分怎么办?我想要第一个。
答案1
我不确定我完全理解你的所有问题,但似乎你已经弄清楚了其中的一部分,只需要一种方法来修剪你想要输入到命令中的文本base64
。
我想回答这部分:
我假设我会查找 a) base64 和 b) ------=部分
修剪空白行,我有 Base64 但如果有 2 个 Base64 怎么办,我想要第一个
您可以使用以下命令打印从第一个实例base64
到第一个实例之后的所有行:=_Part_
sed
sed -n '/base64/,${p;/=_Part_/q;}' inputfile
解释:
-n
禁止打印每一行的默认操作。
/base64/,$
将以下代码块从 的第一个实例应用base64
到文件末尾。 ($
在此上下文中表示最后一行。)
p
意思是打印该行。
/=_Part_/
是一种模式,它限制q
其后面的命令,以便仅当该行包含=_Part_
.
该q
命令退出sed
,导致所有后续行根本不被处理。
这一切的结果是非常相似的到更简单的版本sed -n '/base64/,/=_Part_/p' inputfile
,它会打印从base64
到=_Part_
- 但这个更简单的版本会打印多个这样的部分,而不是在第一个之后停止。