[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
没明白你想做什么,
把 dcba 打头的行合并到上一行:
  1. sed -r ":a;N;/\n(dcba)/!ba;s//\1/" 1.txt > 2.txt
复制代码

TOP

回复 3# hlzj88


    请给出你的真实的文本样例,修改前是什么样子,修改后是什么样子,说清楚需要如何修改。

TOP

本帖最后由 WHY 于 2021-9-12 06:52 编辑
  1. sed -r ":a;N;/([^。,、…?])\ndcba[^\n]*\n/!ba;s//\1/" 1.txt > 2.txt
复制代码
1

评分人数

    • hlzj88: 服了,几行代码搞不定的一行解决了。学习。技术 + 1

TOP

回复 7# hlzj88


    有点小问题,已改。
:a 是标签
N 是把下一行追加到模式空间,下一行与当前读入的行当做 "一行" 处理
ba 是跳转到标签 a

追加下一行到模式空间,如果 "([^。,、…?])\ndcba[^\n]*\n" 不匹配模式空间的内容,跳转到标签a,继续追加,直到匹配为止。
如果匹配,执行正则替换,删除匹配行

TOP

回复 9# hlzj88


1.我测试没有问题,sed 版本 4.4
2.表达式 "([^。,、…?])\ndcba[^\n]*\n" 中的 ^ 表示 "否定",不是表示字符串开头的锚点。
3.按照你的描述,关键词 dcba 的上一行以句号(或其它)标点结尾的行不需要合并,这个并没有问题。

TOP

返回列表