中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: sed 提取文档内容 上一主题 | 下一主题
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『楼 主』:  sed 提取文档内容

a.txt内容如下
dslfj
@aaa\张三\kjj\工商局\sdf\局长\sdfj
\李四\dfj\物资局\sdkfj\科长\
@dsf\王三军\sdkfj\税务局\dslfj\副局长\
jsdf
特点:汉字全在\\内  (如果因\是特殊符号,可以换成其它的符号)
要求用sed命令 只处理 @ 符号开头的行,到下一个以 @ 符号开头的行结束
得到如下结果,注意:有空行
工商局
局长  张三

物资局
科长   李四

税务局
副局长  王三军

如果不行,得到这个结果也可以
工商局局长  张三
物资局科长  李四
税务局副局长  王三军

2007-6-25 21:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




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


sed -n "/^@/,/^@/!d;s/.*\\\(.*\)\\.*\\\(.*\)\\.*\\\(.*\)\\.*/\2\n\3 \1\n/p" a.txt


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





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

真牛!!!
还有几个问题想请教 版主 一下
1,sed 处理文档 和文档的大小有关吗?好像从别处看到说处理大的文档时要注意,注意什么?是会出错吗?
2,那么批处理处理文档和大小有关吗?

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





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

代码好长,请问可以向批处理一样分行写吗?
我是写在批处理中的.

2007-6-25 22:22
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




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

sed 又名行编辑器,即一行行的来处理文本的,所以不用担心文件过大而出错。

不能直接在批处理分行写,否则报错。

如果你要将各个命令分行,可以写个sed脚本,用sed命令来调用。

比如上面的
sed -n -f a.sed a.txt
a.sed 的内容:

  Quote:
/^@/,/^@/!d
s/.*\\\(.*\)\\.*\\\(.*\)\\.*\\\(.*\)\\.*/\2\n\3 \1\n/p



2007-6-25 22:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 6 楼』:  



  Quote:
Originally posted by lxmxn at 2007-6-25 22:37:
sed 又名行编辑器,即一行行的来处理文本的,所以不用担心文件过大而出错。

单行超过2048个字符还是会出错的,没有记错的话

2007-6-25 22:51
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





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

多谢,又学习了.

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





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

sed脚本里面是不是只要写 引号内的内容就可以了,
我写了个 删除所有符号的脚本,怎么不能运行呢?
内容
s/,/ /g;s/(/ /g;s/)/ /g;s$;$ $g;s/\:/ /g;s/\./ /g;s/?/ /g;s/-//g;s/ / /g
s/,/ /g;s/;/ /g;s/(/ /g;s/)/ /g;s/。/ /g;s/:/ /g;s/、/ /g
s/女/ /g;s$/$ $g;s/#/ /g
用下面的调用的
sed -n -f a.sed aaa.txt | more>bbb.txt

2007-6-25 23:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




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


sed -f a.sed aaa.txt | more>bbb.txt


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





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

晚上好 lxmxn 又来打搅您了
还是上面的要求,有一点改变
要求: 将==内的占一行,--号内的另起一行,\\内的加一个空格,放在--号内的内容的后面,再加一空行,也就是输出结果同上面一样,
dslfj
@aaa\张三\kjj=工商局=sdf-局长-sdfj
\李四\dfjsdkfj-科长-fg=物资局=
@sdkfj=税务局=dslfj-副局长-dsf\王三军\
jsdf


2007-6-26 03:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




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

这个你自己写一下吧。

总依赖别人不是好事。

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





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

s/.*\@\(.*\)\@.*\@\(.*\)\@.*\@\(.*\)\@.*/\2\n\3 \1\n/p

原来是这样,用  \(.*\)\  定义区域

[ Last edited by 26933062 on 2007-6-27 at 03:39 AM ]

2007-6-26 13:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




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

又学习了一下sed,写的比较粗糙。

  Quote:
sed -n "/@/,/@/{!d;H;s/.*=\(.*\)=.*/\1/p;G;s/.*-\(.*\)-.*$/#\1/p;G;s/.*\\\(.*\)\\.*/\1\n/p;}" a.txt|sed "/^#/{s/#//;N;s/\n/ /}"

[ Last edited by lxmxn on 2007-6-27 at 09:30 PM ]

2007-6-27 21:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: