如何用sed删除下一行是空行的含open模式的行?
Sed命令实现删除后续行为空行的含指定模式的行
原始文件内容 (file.txt)
checking open something connected open something connected open something checking open something checking open something connected open something
期望处理后的内容
checking open something connected open something connected checking checking open something connected
已尝试的命令
尝试过的sed单行命令未达到预期效果:
sed -i "/open/{$!N;/\n.*^$/!P;D}" file.txt
核心需求
仅删除后续行为空行的包含open模式的行。
可行解决方案
使用以下sed命令即可实现需求:
sed -i '/open/{N;/\n$/!P;D}' file.txt
命令逻辑解释
/open/{:定位到所有包含open的行N:将当前行的下一行追加到模式空间中,此时模式空间包含当前行+换行符+下一行/\n$/!P:如果模式空间的结尾不是\n$(即下一行不是空行),则打印模式空间的第一部分(也就是原来的open行)D:删除模式空间的第一部分(到第一个换行符为止),然后重新执行sed循环,处理剩余的内容
内容的提问来源于stack exchange,提问作者Robot110010
相关产品推荐
相关产品推荐

