中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-09 11:08
47,811 主题排行 / 349,895 发帖 / 今日 0 篇 / 48,253 会员排行
DOS批处理 & 脚本技术(批处理室) » 关于"sed"命令合并文本文件上下行的问题
可打印版本  2,682 / 36
第1楼 youaoyi 发表于 2008-08-17 01:40
初级用户 发帖 67 积分 154
关于"sed"命令合并文本文件上下行的问题
sed -e :a -e "/\\$/N; s/\\\n//; ta"

可以将行尾为“\”文本的下一行合并到上一行,

请教:怎样改才能同时将行首为“|”的合并到上一行 ???

另外还要删除文本中所有的空行

急用 拜托了

-= 样本文本见附件 =-

[ Last edited by youaoyi on 2008-8-17 at 04:01 PM ]

附件
a2.rar (458 bytes)
第2楼 youaoyi 发表于 2008-08-17 04:11
初级用户 发帖 67 积分 154
sed -e :a -e "/\\$/N; s/\\\n//; ta" -e "$!N;s/\n|/|/;ta" -e "P;D" -e "/./!d" 文件.txt

寻思着修改了一个,但是不管用,不知道什么原因。

[ Last edited by youaoyi on 2008-8-17 at 04:27 AM ]
第3楼 youaoyi 发表于 2008-08-17 04:20
初级用户 发帖 67 积分 154
sed "/^$/d" 文件.txt

单独执行这个,确实能把所有空行删除掉。
第4楼 HAT 发表于 2008-08-17 11:54
版主 发帖 5,017 积分 9,023
sed -e :a -e "/\\$/N; s/\\\n//; ta" 可以将行首为“\”的文本合并到上一行

你听别人说的?还是自己亲自试验过?
第5楼 youaoyi 发表于 2008-08-17 12:51
初级用户 发帖 67 积分 154
是自己试验过

这个是把行尾为“\”的下一行合并到上一行
第6楼 HAT 发表于 2008-08-17 13:03
版主 发帖 5,017 积分 9,023
这样可以吗?
第7楼 youaoyi 发表于 2008-08-17 13:34
初级用户 发帖 67 积分 154
不行 命令无效

样本如下,最终求生成9条不含空行的文本,

文本中数据行的第一位是已经编好的序号。

[ Last edited by youaoyi on 2008-8-17 at 04:01 PM ]

附件
a2.rar (458 bytes)
第8楼 HAT 发表于 2008-08-17 13:45
版主 发帖 5,017 积分 9,023
按照你的规则,应该是10行啊,"徐"和"秀清"中间的那个换行不符合删除要求啊。
第9楼 youaoyi 发表于 2008-08-17 14:54
初级用户 发帖 67 积分 154
是的 整理例子时 忘记在这条数据后“徐”之后加上“\”了,抱歉。

已经更改了附件
第10楼 HAT 发表于 2008-08-17 15:48
版主 发帖 5,017 积分 9,023
你的sed版本的问题吧

Microsoft Windows XP
(C) Copyright 1985-2001 Microsoft Corp.

C:\ProgramMy\GnuWin32>sed "/^$/d" a.txt|sed -e :a -e "/\\$/N; s/\\\n//; ta"|sed ":a;$!N;s/\n|/|/;ta;P;D"
1|370105|倒闭|经济原因|韩翌|200537015018509|49307.5|
2|370108|倒闭|其它:|丁伟东|20083701085005903|10.0|
3|370707|倒闭|其它:|陈汝\芳|2008370707000949|10.0|
4|372407|倒闭|其它:|徐秀清|2008375007437|1990.0|
5|372804|倒闭|经济原因|洪振飞|2002372878229|2550.0|
6|372407|倒闭|其它:|边爱玲|200837215015010082|3990.0|
7|372909|倒闭|其它:|杨留更|200837290015002744|9990.0|
8|370454|倒闭|其它:|孟庆国|200837045015000127|10.0|
9|370454|倒闭|其它:|孟庆国|2008370405015000127|10.0|

C:\ProgramMy\GnuWin32>sed --version
GNU sed version 4.1.5
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE,
to the extent permitted by law.


[ Last edited by HAT on 2008-8-17 at 03:50 PM ]
第11楼 youaoyi 发表于 2008-08-17 16:03
初级用户 发帖 67 积分 154
不是的 麻烦下载下附件 a2.txt

原来的是我手工录入的,可以达到目的。

但是第10条之后的是原本的数据,就不行了。
第12楼 youaoyi 发表于 2008-08-17 16:05
初级用户 发帖 67 积分 154
一楼、七楼都已经更新了附件。
第13楼 HAT 发表于 2008-08-17 16:16
版主 发帖 5,017 积分 9,023
你是说"徐慧"那一行对吧,那里有一个Windows下不可见的字符,你用16进制编辑器打开看看就知道了。
你把"|徐慧|"删除,重新输入一遍就可以了。
第14楼 youaoyi 发表于 2008-08-17 16:18
初级用户 发帖 67 积分 154
是的,但是象这种情况在文本中非常非常多,
这种不可见的字符,能否在sed处理时一并删除掉呢?
数据量很大,拜托了。
第15楼 HAT 发表于 2008-08-17 16:19
版主 发帖 5,017 积分 9,023
你的文本文件是不是从Linux或者Unix系统里面拷过来的?
1 2 3  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023