中国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命令 如何在a.txt的每一个空行的下一行非空行的开头插入一个英文字母 d
会 sed 的请帮帮忙,
谢谢!!!

[ Last edited by 26933062 on 2007-6-24 at 02:01 AM ]

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





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

sed '/^$/{:loop;n;/^$/b loop;s/^/d/}' 1.txt

至于 含有 空格 的 "空行"

你自己稍微修改下 就可以了

[ Last edited by bjsh on 2007-6-24 at 12:56 PM ]

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





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

谢谢 bjsh 版主 的解答,代码可以运行,
但是内容看不懂,只知道是以空行开头,中间的 loop 是什么意识啊?
还请解释一下整句好吗?还有怎么处理含空格的空行我也不会.
刚接触 sed  无奈何 版主的那篇帖子没有实例,新手实在难以看懂,我看了整整一晚,
连一个命令都没搞懂,倒是从其它的地方看到一些教材,搞明白了几个简单的替换.

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





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

:loop 是 标签;
n 是 打印当前行 并读取下一行到模式空间; 然后执行下一条命令;

/^$/b loop 判断模式空间 是否为空行; 如果是 则跳转到 loop 标签处;

构成循环 直到 模式 空间 为 非空行;

然后 s/^/d/ 把开头 替换为d; 实现在开头添加d的效果.

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





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

对了 如果是在 cmd 下运行 请讲 单引号 换成 双引号

2007-6-24 16:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 6 楼』:  


Sed "/^$/{:c;n;s/./d&/;Tc}" nulfile.txt


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





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

非常感谢两位 版主 的解答,
bjsh 版主的解释非常详细,让我又学到了不少东西,谢谢,再次表示感谢!!!

lxmxn 版主 的代码能达到我的要求,即: 排除含 空格 的 空行
但我不明白后面的 Tc 是干什么的?
还有我发现 将bjsh 版主的代码最后的 ^ 改为 .  也能达到要求,不知是何道理.
难道是这个 .  来判断的???


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





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

晕,
测试了一天,人都测晕了,发现两位版主的原来其实都不能将含空格的行当作空行, 看眼花了..........


[ Last edited by 26933062 on 2007-6-24 at 09:39 PM ]

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





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

呵呵;
还没搞定啊;
我还以为 把空格加上 让你自己写的;

sed "/^[ \t]*$/{:loop;n;/^[ \t]*$/b loop;s/^/d/}" 1.txt

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





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

感谢,太复杂,一下子看不懂,,,,,,,,,,,,,

2007-6-24 23:29
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: