中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何用sed合并多行空行为一行
作者:
标题: 如何用sed合并多行空行为一行 上一主题 | 下一主题
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『楼 主』:  如何用sed合并多行空行为一行

看了一晚的教程,感觉学到了不少
但是由于个人天生愚钝,想了一晚,怎么也想不出如何将连续多个空行合并为一行,只写出以下代码,怎么运行都不成功,还请指点指点.

sed "/^$/!d;n;:c;/^$/d;n;/^$/b c;G" aaa.txt|more>bbb.txt

我的理解是 首先匹配第一个 空行, ! 忽略,再打印下行如果是空行就用 /^$/d 删除,再打印下一行,由
/^$/b 判断,如果是空行就跳回标签c再删除,直到非空行,就用 G 插入一空行.
代码臃肿而且无效,实在没有思路了,请帮帮忙,

以下是将所有空格替换成一个空格的代码,请看看对不?或是可以更简化吗?

sed ":c;s/  / /g;tc" aaa.txt|more>bbb.txt

[ Last edited by bjsh on 2007-7-31 at 10:43 AM ]

2007-6-28 03:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 2 楼』:  

将连续多个空行合并为一行
sed "/^$/{N;/^\n$/D}" test.txt

[ Last edited by bjsh on 2007-6-28 at 09:26 AM ]

2007-6-28 09:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 3 楼』:  

将所有空格替换成一个空格

sed "s/[[:space:]][[:space:]]*/ /g" test.txt

仔细学学 正则表达式;

认认真真的 去 看 sed 的 每一条 指令 的 定义 和 执行步骤;
务必深刻理解;

有些 不是 一遍两遍 能真正理解的.

2007-6-28 09:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 4 楼』:  

多谢 !!!
/^\n$/ 是什么意识? 看不懂 在/^$/ 中间加一个 \n  不明白

2007-6-28 14:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: