中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-23 12:48
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 【共享】P者,sed不可不学 查看 10,217 回复 45
楼 主 【共享】P者,sed不可不学 发表于 2008-05-31 04:22 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
18年会员
UID 103127
性别 男
状态 离线
大家在这个帖子里尽管讨论文本,字符处理的问题,但是回答者尽量用sed处理
只要处理的效率高,也可考虑用sed+for+其他,总之外部工具就只提供sed)------OS: windows NT系列
目的------就是为了大家很好地学习sed,带着问题学,这从实践中学习

我也在学,以前总是半途而废,这个帖子发了,就真正从这里开始sed的学习旅程了,希望有你同行。。。。

1,输出文本时(这5个字在以后省略)怎样显示一个文本的前10行?最后1行?

::显示文本前10行
sed 11,$d a.txt
::显示文本最后一行
sed -n $p a.txt
::显示文本最后一行
sed $!d a.txt

解释:$表示....d,p表示,-n参数....举个例子.....

2,将文本的“;”“,”作为换行符其他字符不变?

sed s/;/\n/g a.txt

解释:......

3,显示文本第20行到25行之间的内容? ----3楼

4,显示文本的奇数行?偶数行? ----4楼

5,在文本里包含"爱你"的字符换成”【爱你】“,包含“恨你”的字符换成"(恨你)"输出? ----5楼

6,将文本里的这些字符%:^?<>*/\|&全部替换为空格? ----6楼

7,怎么显示纯英文行,中文行?中英文混合行?

8,将奇偶行拼接成一行,比如12行合并,34行合并....?

9,如果当前行是以"我"字开头,怎么将它合并到上一行?

10,将每一行首、尾、的所有空格删除? ----7,12楼

11,给每一行的开头加上"echo"? ----8楼


12,如果某行的行尾是以"。"结尾,就删除"。" ----13楼

13,如果某行多于10个字符,就只显示该行前10个字符?

14,如果某行包含数字,以20个字符为宽度将数字右对齐?

15,倒置所有行,第一行成为最后一行,依次类推.....

16,将行中的字符逆序排列,第一个字成为最后一字,……

17,在每5行后增加一空白行

18,显示所有重复行

19,在每行的第5个与第6个字符之间插入”/*“,第10与第11个字符之间插入"*/"。如果某行少于11个字符补空格后插入。

20,对一个文件夹下的N个TXT文件进行处理,对每一个TXT里的每一行前面都加入000 ----27楼

21,分割文本,将其1到100行保存为a_1.txt,101-200行保存为a_2.txt,以此类推...

22,按如下顺序重新排列行数:1,11;2,12;...;9,19;10,20;后面的行以此类推(每20行一个周期)

23,A文本每行插入到B文本中对应行后面,例如,A的第一行插到B的第一行后面,A的第二行插到B的第二行后面,以此类推。。。
.....

问题还多者呢,先问这些,
大家能想到什么文本处理的问题就发,然后我来回答。我不会了大家回答,

大家在回答时,最好能附上一定的解释,如果自己对所用的参数比较了解,能讲解就更好了,一来方便其他人学习,二来时间长了,自己下次浏览此贴时也是个参考(只是建议,仅此)


好了,征集答案。。。

[ Last edited by plp626 on 2008-6-3 at 07:57 AM ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
ngd +4 2008-06-19 14:07
山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2 发表于 2008-05-31 04:29 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
18年会员
UID 103127
性别 男
状态 离线
sed工具,各类帮助文档下载:
http://upload.cn-dos.net/img/498.rar

我就收集了这些:
kongge.txt
sed1line.txt
sed.exe
sed.pdf
sed_readme.txt
SED单行脚本快速参考.txt
山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
3 发表于 2008-05-31 10:01 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
3,显示文本第20行到25行之间的内容?
sed -n "20,25p" a.txt
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
jvive +2 2008-05-31 17:27
4 发表于 2008-05-31 10:19 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
4,显示文本的奇数行?偶数行?

sed -n "p;n"  a.txt

sed -n "n;p"  a.txt
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
jvive +2 2008-05-31 17:27
5 发表于 2008-05-31 10:24 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
5,在文本里包含"爱你"的字符换成”【爱你】“,包含“恨你”的字符换成"(恨你)"输出?
sed -e "s/爱你/【爱你】/g" -e "s/恨你/(恨你)/g" a.txt
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
jvive +2 2008-05-31 17:28
6 发表于 2008-05-31 10:28 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
6,将文本里的这些字符%:^?<>*/\|&全部替换为空格?
sed "s// /g" a.txt
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
plp626 +3 2008-06-01 16:30
7 发表于 2008-05-31 13:15 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
10,将每一行首、尾、的所有空格删除?
sed "s/^ *//;s/ *$//" a.txt
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
plp626 +3 2008-06-01 16:30
8 发表于 2008-05-31 13:16 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
11,给每一行的开头加上"echo"?
sed "s/^/echo/" a.txt
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
plp626 +1 2008-06-01 16:31
9 发表于 2008-05-31 13:18 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
12,如果某行的行尾是以"。"结尾,就删除"。"
sed "s/。$//" a.txt
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
plp626 +3 2008-06-01 16:31
10 发表于 2008-05-31 13:18 ·  中国 广西 南宁 电信
中级用户
★★
丶杏灬丶
积分 280
发帖 105
注册 2008-05-06 03:37
18年会员
UID 117858
性别 男
来自 广西
状态 离线
外部命令......
11 发表于 2008-05-31 18:15 ·  中国 广东 韶关 电信
高级用户
★★★
CMD感染者
积分 691
发帖 383
注册 2008-05-23 00:38
18年会员
UID 119451
性别 男
状态 离线
下来学习。。。
12 发表于 2008-05-31 19:38 ·  中国 甘肃 兰州 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
20年会员
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
10,将每一行首、尾、的所有空格删除?
sed "s/^*//;s/*$//;s/ //g" file
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
plp626 +3 2008-06-01 16:31
13 发表于 2008-05-31 21:24 ·  中国 江苏 常州 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
sed命令好难懂
如果某行的行尾是以"。"结尾,就删除"。"
 sed "s/。\t*$//"
删正行
sed "/。$/d"
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
plp626 +3 2008-06-01 16:32
简单!简单!再简单!
14 发表于 2008-05-31 22:11 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
VBS...飘过……


9. 替换 回车+我,我
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
15 发表于 2008-05-31 22:15 ·  中国 上海 鹏博士宽带
中级用户
★★
积分 484
发帖 250
注册 2007-06-05 23:33
19年会员
UID 90372
性别 男
状态 离线
13

sed -e "s/\(..........\).*/\1/" if.txt


sed不支持大括号确定字符数,所以只好用10个点来代表10个字符了,用\( \)括起来自动编号为第一组,也就是说把10个字符后面的都清空了。

[ Last edited by pooronce on 2008-6-1 at 09:11 PM ]
论坛跳转: