-1

假设我们有一个行块,如下所示:

<segment1>
    <element="1" prop="blah"/>
    <element="2" prop="blah"/>
    .
    .
</segment1>

<segment2>
    <element="1" prop="blah"/>
    <element="2" prop="blah"/>
    .
    .
    <element="1" prop="blah"/>
    <element="2" prop="blah"/>
</segment2>

<segment3>
    <element="1" prop="blah"/>
    <element="2" prop="blah"/>
    .
    .
</segment3>

例如,这里的段 2 有需要删除的重复项(排序在这里无关紧要)。那么现在如何绑定 sed 以仅从段 2 中删除重复项。在此示例中,片段 2 是第二个片段,可能并非所有可能出现的情况都是如此,因为它也可能是子集的子集。

我对此的想法是使用标签,从命令开始和结束gsed -ni 'G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P'

4

1 回答 1

0

这可能对您有用(GNU sed):

sed -E '/<segment2>/,/<\/segment2>/{G;/^([^\n]*)(\n.*)*\n\1(\n|$)/!{P;h};d}' file

使用 和 之间的<segment2>范围</segment2>

将范围内已经看到的内容的副本附加到当前行,如果没有看到,则打印当前行并复制。

否则,删除该行。

于 2021-10-27T19:30:25.643 回答