从文本bash中删除标题[关闭]

Posted

技术标签:

【中文标题】从文本bash中删除标题[关闭]【英文标题】:Remove header from text bash [closed] 【发布时间】:2021-08-24 23:22:54 【问题描述】:

我需要使用 bash 删除文档的开头和结尾。 我一直在使用 sed 和 perl 的不同组合,但无法正确使用。

原文:

unnecesary text
-----BEGIN CERTIFICATE-----
certificathe that i want
-----END CERTIFICATE------ some
unnecesary text. 

我需要的文字:

-----BEGIN CERTIFICATE-----
certificathe that i want
-----END CERTIFICATE------

我尝试先做标题,然后做最后部分,但没有成功。

我也尝试忽略“-----”并删除,直到 BEGIN 稍后添加它,但没有成功。

对我的问题有任何帮助或考虑吗?

非常感谢您的宝贵时间。

问候。

【问题讨论】:

说“我也尝试过”而不实际显示您尝试过的内容是没有帮助的。 sed 中的简单解决方案效果很好。 您要修改文件,还是仅将证书部分保存到另一个文件/将其传递给管道中的另一个程序? 对不起@WilliamPursell,我不想把所有的尝试都放在心上,以免给和我有同样问题的人造成混淆。但下一次我会说,即使他们是错误的处决。感谢您的建议。 perl -ne'print if /^-----BEGIN CERTIFICATE-----$/ .. /^-----END CERTIFICATE------$/' 【参考方案1】:

以下代码利用范围运算符从输入文件中过滤掉感兴趣的信息

use strict;
use warnings;

while( <> ) 
        print if /-----BEGIN CERTIFICATE-----/ .. /-----END CERTIFICATE------/;

script file.dat运行

输出

-----BEGIN CERTIFICATE-----
certificathe that i want
-----END CERTIFICATE------

【讨论】:

【参考方案2】:

有很多方法可以做到这一点。简单的sed 解决方案可能如下所示;

$ cat input
unnecesary text
-----BEGIN CERTIFICATE-----
certificathe that i want
-----END CERTIFICATE------ some
unnecesary text.
$ sed -E -n '/^-----BEGIN/,/^-----END//(^-----END CERTIFICATE------).*/s//\1/; p; ' input
-----BEGIN CERTIFICATE-----
certificathe that i want
-----END CERTIFICATE------

【讨论】:

这行得通。太感谢了。我在使用“-”时遇到了问题,但我明白了它的必要性。谢谢!

以上是关于从文本bash中删除标题[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

通过 Bash 从文本文件中删除空行,包括空格字符 [重复]

从文本文件中删除 Unicode 字符 - sed ,其他 Bash/shell 方法

bash 文本处理以删除 ascii 并从结果中获取唯一行

如何删除多余的双引号,而不是使用bash脚本在一行文本中打开和关闭双引号

bash 无法从文本文件中找到目录 [重复]

如何从文本中删除动词、介词、连词等? [关闭]