从文本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 方法