SED 挑战 - 根据条件添加线路

问题描述 投票:0回答:1

“sed”让我头疼,所以我在这里发布这个问题。是的,它应该使用 sed 完成,在脚本中执行。

这个想法是修改一个由大约 30 行块组成的文本文件。每个以“StartLine”开头的块与下一个块之间由一个空行分隔(AD 搜索结果)。 在每个块中,我需要在“AlwaysExists”行之后添加“AddMe”行,但仅如果在此块中尚不存在包含“NoNoNo”的行。所以它的添加条件... 因此,应该有以下其中之一:

StartLine
AlwaysExists
NoNoNo  <--- Not added "AddMe", because "NoNoNo" exists
<Emply line>

StartLine
AlwaysExists
AddMe <--- Added, because NoNoNo here not exists
<Emply line>

以下可能是一种工作方法,但我无法完成它,所以它有效:

sed -i '/StartLine/,/^$/{
  <whatever is needed>
}' myfile.ldif

希望有人能帮忙。提前致谢。 克里斯

编辑:

sed '/StartLine/,/^$/{
    /NoNoNo/!{
        :loop
        N
        /NoNoNo/!{
            $!b loop
            a\
AddMe
        }
    }
}' /uploads/ldif.txt

...这只会在底部添加一次 AddMe...

shell sed
1个回答
0
投票

不要使用范围。只要总有一个空行:

sed -n '
    /StartLine/ {
:a
        N
        //!d
    }
    /NoNoNo/!s/AlwaysExists\n/&AddMe\n/
    p
' inputfile
© www.soinside.com 2019 - 2024. All rights reserved.