从大文件中删除特定文本

时间:2016-11-02 13:31:58

标签: unix sed

我有一个看起来像这样的混乱文件

@SL2.50Ch00
NNNNnnnnNNNNNNNNNNNNNNNNNNNNNNNNAAATAAATAATAATAATAATAATAATAA

+

fcii[cccff8cffiffcfffffiiiiiiiiiffNflllQllrrruru_uuruuur{~~Z

@SL2.50Ch01

我希望文件看起来像这样

@SL2.50Ch00
NNNNnnnnNNNNNNNNNNNNNNNNNNNNNNNNAAATAAATAATAATAATAATAATAATAA
@SL2.50Ch01

基本上必须删除从+到下一个标题@ SL2.5Ch01的所有内容。我需要删除+但保留@ SL2.5Ch01 此外,为了可见度,我在这里减少了字母的数量,所以它实际上在这里的+符号之前有数千个字母。

我尝试使用grep首先找到它然后sed用什么都替换它。

尝试:

grep '\n\+' 

试图用反斜杠

来逃避加号
grep -E '^M\+'

不起作用。

同样sed逐行工作 - 如何让它扫描整个文件?

1 个答案:

答案 0 :(得分:0)

如果awk没问题,请尝试以下方法:

awk -vp=1 '/^[+]/{p=0} !p && /^@SL2.50/{p=1}p' file

<强>测试

$ awk -vp=1 '/^[+]/{p=0} !p && /^@SL2.50/{p=1}p' file
@SL2.50Ch00
NNNNnnnnNNNNNNNNNNNNNNNNNNNNNNNNAAATAAATAATAATAATAATAATAATAA

@SL2.50Ch01