Sed 仅删除正则表达式后面的行,同时保留带有正则表达式的行

Sed 仅删除正则表达式后面的行,同时保留带有正则表达式的行,sed,Sed,好吧,我完全被难住了 场景:使用Word查看时包含100行文本的.rtf文件。单词“Linux”在一行上,下面有一个空行。我需要保留“Linux”的行并删除它下面的空行。然而,当使用vi查看该行时,该行并不是真正的空白,因此处理删除空白行的帖子都不起作用。此外,我可以找到很多帖子来删除带有正则表达式的行和下一行,但我需要保留正则表达式行。文件中只有一行有“Linux”一词 我知道塞德可以做到这一点,但还没有弄明白 sed '/Linux/{n;d;}' (…答案必须至少包含30个字符。)可能是

好吧,我完全被难住了

场景:使用Word查看时包含100行文本的.rtf文件。单词“Linux”在一行上,下面有一个空行。我需要保留“Linux”的行并删除它下面的空行。然而,当使用vi查看该行时,该行并不是真正的空白,因此处理删除空白行的帖子都不起作用。此外,我可以找到很多帖子来删除带有正则表达式的行和下一行,但我需要保留正则表达式行。文件中只有一行有“Linux”一词

我知道塞德可以做到这一点,但还没有弄明白

sed '/Linux/{n;d;}'

(…答案必须至少包含30个字符。)

可能是这样吗?我查看了一个RTF文件,它看起来好像有分隔行的回车符。所以我用它们作为记录分隔符,删除了一行,并且能够读取结果文件,这行就消失了。我不知道它在其他情况下是否有效。你必须彻底测试它是否有效。我使用了awk,因为rtf文件在Unix/Linux中不是“有效”的文本文件,我认为可能
sed
无法做到这一点

awk 'n-->0{next} /Linux/{n=1}1' RS='\r' ORS='\r' infile.rtf > outfile.rtf

如果有效,则应丢弃“Linux”一行下的一行

可能会将文件更改为
sed'/^Linux$/{n;d;}'thefile>thenewfile
(如果Linux确实是相关行中唯一的内容)。。。但是你的解决方案的想法是正确的。@OlivierDulac:我想到了,但“文件中只有一行有“Linux”字样。谢谢Olivier和Beta!我已经尝试过了,它似乎在CentOS上工作,但由于某种原因,word无法打开该文件(说它已损坏)。我一直在尝试安装在Windows 7机器上的gnuwin sed,但它不起作用。Word与其他人玩得不好;如果Word一开始就编写了该文件,它可能无法接受其他工具的编辑。明白了,Beta!所有隐藏的字符都玩得不好。走另一条路。我非常感谢你们两位使用Quick assist!scruminizer,使用awk也没有乐趣。我猜由于.rtf字符,两者都不起作用。我非常感谢这种帮助!哦,值得一试。;)我使用的rtf是使用MS Word创建的,也许这会有所不同。。