Mar*_*tin 2 regex bash awk sed
我对sed非常熟悉,但我不太了解awk,我不知道如何解决这个问题.我已经google了一段时间但到目前为止没有运气.情况就是这样:我有一个包含组和部分的大文件,如下所示:
<A1>
some nr of lines
</A1>
<A2>
some nr
of lines
</A2>
<B1>
some
nr of
lines
</B1>
<B2>
some nr of lines
</B2>
<B3>
bla
</B3>
<C1>
bla
</C1>
<C2>
bla
</C2>
Run Code Online (Sandbox Code Playgroud)
现在问题是组的数量可以改变,部分的数量可以改变,并且每个部分中的行数可以改变.例如,A部分可能转到25,B部分可能转到8,依此类推.我需要做的是删除某些组的所有条目,在上面的示例中,我想删除所有内容<B*>
,留下以下内容:
<A1>
some nr of lines
</A1>
<A2>
some nr
of lines
</A2>
<C1>
bla
</C1>
<C2>
bla
</C2>
Run Code Online (Sandbox Code Playgroud)
另外,我想删除几个部分(尽管这些部分可以在单独的运行中),例如,如果文件从A1转到R123,我想要删除B*,F*,M*等.
如果有类似的事情已经被问到并在某处我回答道歉,我确实在发布之前找到了解决方案.
谢谢!
使用sed:
sed '/<B1>/,/<\/B3>/d' infile
Run Code Online (Sandbox Code Playgroud)
这意味着从sed的输出中查找一系列文本并从中<B1>
结束</B3>
并从中删除它.(这意味着sed将在stdout上打印其余文件)
编辑:这也适用于您的情况:
sed '/<B[0-9]*>/,/<\/B[0-9]*>/d'
Run Code Online (Sandbox Code Playgroud)