|
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
状态 离线
|
|
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 |
|