中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-23 12:41
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 【共享】P者,sed不可不学 查看 10,212 回复 45
16 发表于 2008-05-31 22:40 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线

:: 12,如果某行的行尾是以"。"结尾,就删除"。"
sed -e "s/。$//" a.txt | more


:: 13,如果某行多于10个字符,只显示每一行的前10个字符
sed -n "/........../{s/\(..........\).*/\1/p}" a.txt | more
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
plp626 +7 2008-06-01 16:33
致精致简!
17 发表于 2008-05-31 22:44 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
晕 13 题跑题了,
变成了 匹配10个字符以上的行,并只显示前10个字符
sed -n "/........../{s/\(..........\).*/\1/p}" a.txt | more
致精致简!
18 发表于 2008-05-31 23:27 ·  中国 上海 鹏博士宽带
中级用户
★★
积分 484
发帖 250
注册 2007-06-05 23:33
19年会员
UID 90372
性别 男
状态 离线
全部看了一遍:

1
sed -n -e "1,10p;$p" file
::1 用-n禁止输出,这样打印1到10和末行

2
sed -e "s/;/\n/g;s/,/\n/g;" file
::2 简单替换

3
sed -e "20,25!d" file
::3 同你第一个,20到25不清空

4
sed -e "s/.*//g;N;" file
::清空ps并读入下一行,偶行输出
sed -e "1!{s/.*//g;N}" file
::同上,只是跳过第一行,奇行输出

(想下面时出了好点的解决方法:
sed -e "p;N;d" file
::直接打印一行,多读一行,删,奇行输出
sed -e "1d;p;N;d" file
::偶行输出,每一行直接删掉
)


5、
简单替换,不重复了

6、
仍是简单替换,不说了,只是注意转义

7、
这个有点难度,目前还不知道怎么在正则里面表达汉字,同求解

8、
sed -e "N;s/\n//" file
::N读取下一行,替换掉换行符

9、
sed -e "1{x;d};${x;p;x;b};/^5/{x;G;s/\n//;x;b};x" file
::暂时用5代表“我”,用中文的总是不正常,原因未明,期待答案

10
sed -e "s/^\s*//;s/\s*$//;" file
::\s代表空字符,一般是空格和TAB

11、12略
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
plp626 +9 2008-06-01 16:33
19 发表于 2008-05-31 23:34 ·  中国 广东 深圳 电信
初级用户
积分 54
发帖 24
注册 2008-05-30 20:17
18年会员
UID 120132
性别 男
状态 离线
太好了.
我来说一个.
前提是对一个文件夹下的N个TXT文件进行处理,对每一个TXT里的每一行前面都加入000
20 发表于 2008-05-31 23:43 ·  中国 广东 深圳 电信
初级用户
积分 54
发帖 24
注册 2008-05-30 20:17
18年会员
UID 120132
性别 男
状态 离线
如何把下面这段字符加入到某个文件夹下的N多个文件的第一行前面,之后回车.保存.
  [ar:LIYANG]
  [ti:CrazyEnglish]
  [al:CrazyEnglish]
  [by:me]
  [00:00.00]
21 发表于 2008-05-31 23:45 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
显示纯英文行
sed -n "/^[a-z A-Z]*$/p" a.txt
致精致简!
22 发表于 2008-06-01 01:34 ·  中国 上海 联通
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
13,如果某行多于10个字符,只显示每一行的前10个字符

我知道这样可以查找出多余10个字符的行,但是不知道怎样只显示前10个字符。
sed -n "/^.\{10\}/p" a.txt


如果再去调用除sed之外的其它命令的话,不知道是否会违背楼主的要求。
23 发表于 2008-06-01 01:43 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
&&哈哈,论坛掀起了sed热了,这是好事,我精神上绝对支持!
本人只用纯批,正在考虑学习vbs,原因在任一台电脑上都能操作,而不用人为添
加任何程序和第三方工具,一个字简单的好!
批处理之家新域名:www.bathome.net
24 发表于 2008-06-01 01:57 ·  中国 上海 联通
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
8,将奇偶行拼接成一行,比如12行合并,34行合并....?

在Unix下是很容易实现的:
sed '$!N;s/\n/ /' a.txt


但在cmd下调用sed.exe的话,这样做是不行的,不知楼主有何高招?
25 发表于 2008-06-01 01:58 ·  中国 云南 昆明 电信
新手上路
积分 14
发帖 7
注册 2007-12-16 04:04
18年会员
UID 105794
性别 男
状态 离线
近来学写了
26 发表于 2008-06-01 02:04 ·  中国 上海 联通
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
Originally posted by 26933062 at 2008-5-31 11:45 PM:
显示纯英文行
sed -n "/^*$/p" a.txt

这个正则表达式写的很正确,在Unix下可以得到正确结果,但是在cmd下调用sed.exe却得不到任何结果。

C:\test>type a.txt
abc
a啊

啊a

ccc

C:\test>sed -n "/^*$/p" a.txt

C:\test>
27 发表于 2008-06-01 02:06 ·  中国 上海 联通
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
Originally posted by zhengruijian at 2008-5-31 11:34 PM:
太好了.
我来说一个.
前提是对一个文件夹下的N个TXT文件进行处理,对每一个TXT里的每一行前面都加入000

sed "s/^/000/" *.txt
28 发表于 2008-06-01 17:51 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
15,倒置所有行,第一行成为最后一行,依次类推.....
sed -n "1!G;h;$p" a.txt
29 发表于 2008-06-01 17:57 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
每行第一个字成为最后一字 没招了 我估计我学不会这个SED 参数看到我头大
sed "/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//" test.txt

[ Last edited by terse on 2008-6-1 at 05:58 PM ]
简单!简单!再简单!
30 发表于 2008-06-01 18:02 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
17,在每5行后增加一空白行
sed "n;n;n;n;G;" a.txt
论坛跳转: