我需要在比赛前删除一个空行.
所以给定文件:
random text
more random text
#matchee
Run Code Online (Sandbox Code Playgroud)
我需要匹配模式/ #matchee /,然后删除之前的空白行.
这是我尝试过的 - 没有成功:
sed '/^[ \t]*$/{N;/#matchee.*$/{D;}}' file.txt
Run Code Online (Sandbox Code Playgroud)
我的逻辑:
基本上/ matchee /是一个必须维护的常量,我需要从/ #matchee /分隔的记录文件中的每个记录中删除一个额外的空行.
无论什么都没有效果.我是RTFM-ing并且D 应该删除模式空间直到换行符.因为N添加换行符加下一行 - 这应该产生预期的结果....唉......不,不再.这是因为匹配基本上没有(空白)吗?
如果存在奇数个空行,您的方法将起作用,但如果存在偶数,则它将失败.您的sed脚本是以下循环.
#matchee,则从模式空间中丢弃L1您会注意到L2始终打印,即使它是空白的,后面跟着一行#matchee.它受到以下事实的保护:它紧跟着奇数个空行.
编辑添加:要修复上述问题,可以使用:命令创建标签和b"分支"到它(goto)的命令来添加内部循环.这个:
sed '/^[ \t]*$/{: a;N;/#matchee/!P;D;/^[ \t]*$/b a}' file.txt
Run Code Online (Sandbox Code Playgroud)
是以下循环:
a←这是一个无操作,只是一个地方goto#matchee,打印L1goto a