gpt4 book ai didi

regex - bash(首选 sed 或 awk)删除第一个和最后一个实例之间的所有内容

转载 作者:行者123 更新时间:2023-11-29 09:38:30 25 4
gpt4 key购买 nike

我对 sed 很熟悉,但我对 awk 不是很了解,我不确定如何解决这个问题。我已经用谷歌搜索了一段时间,但到目前为止还没有运气。情况是这样的:我有一个包含组和部分的大文件,如下所示:

<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>

现在的问题是组的数量可以改变,部分的数量可以改变,每个部分的行数可以改变。例如,A 部分可能会转到 25,B 部分可能会转到 8,依此类推。我需要做的是删除某些组的所有条目,在上面的示例中我想删除 <B*> 中的所有内容,给我留下以下内容:

<A1>
some nr of lines
</A1>
<A2>
some nr
of lines
</A2>
<C1>
bla
</C1>
<C2>
bla
</C2>

此外,我想删除几个部分(尽管这些部分可以单独运行),例如,如果文件从 A1 到 R123,我想删除 B*、F*、M*等

如果类似的问题已经在某个地方被问到并得到回答,我深表歉意,我确实在发布之前尝试找到解决方案。

谢谢!

最佳答案

使用 sed:

sed '/<B1>/,/<\/B3>/d' infile

这意味着查找从 <B1> 开始的文本范围结束于 </B3>并将其从 sed 的输出中删除。 (这意味着 sed 将在标准输出上打印其余文件)

编辑:这也适用于您的情况:

sed '/<B[0-9]*>/,/<\/B[0-9]*>/d' 

关于regex - bash(首选 sed 或 awk)删除第一个和最后一个实例之间的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13809058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com