如果下一行也存在内容,则删除该行

如果下一行也存在内容,则删除该行

我有样品:

This is a test
localhost% This is a test

第一个This is a test将重新出现在下一行的 txt 文件中,该localhost%行之前会有一些字符。This is a test如果下一行包含类似内容,我想删除第一行<arbitrary characters>% This is a test

所以我想检查两行,如果前一行This is a test与下一行匹配localhost% This is a test(请注意%),然后删除前一行。

我怎样才能做到这一点?

答案1

或许:

sed '$!N;/^\(.*\)\n.*% \1$/!P;D'

也就是说,通过使用withsed来处理滚动的 2 行模式空间,如果在 后的第二行末尾 ( )处找到(捕获)第一行,则删除第一行(通过不 ( )打印它来跳过它) 。ND!P\(...\)\1$"% "

这也应该适用于以下情况:

This is a test
foo% This is a test
bar% foo% This is a test

(删除前 2 行)。

答案2

您可以使用以下命令

sed -i "/This is a test/s/^This is a test$//g" test && sed -i '/^$/d' test

输入文件

猫测试

This is a test
localhost% This is a test

执行上述命令后

输出文件

猫测试

localhost% This is a test

相关内容