楼 主
关于"sed"命令合并文本文件上下行的问题
发表于 2008-08-17 01:40 · 中国 山东 济宁 联通
初级用户
★★
积分 154 发帖 67 注册 2007-10-31 13:18 18年会员 UID 101283 性别 男
状态 离线
sed -e :a -e "/\\$/N; s/\\\n//; ta"
可以将行尾为“\”文本的下一行合并到上一行,
请教:怎样改才能同时将行首为“|”的合并到上一行 ???
另外还要删除文本中所有的空行
急用 拜托了
-= 样本文本见附件 =-
[ Last edited by youaoyi on 2008-8-17 at 04:01 PM ]
第 2 楼
发表于 2008-08-17 04:11 · 中国 山东 济宁 联通
初级用户
★★
积分 154 发帖 67 注册 2007-10-31 13:18 18年会员 UID 101283 性别 男
状态 离线
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 楼
发表于 2008-08-17 04:20 · 中国 山东 济宁 联通
初级用户
★★
积分 154 发帖 67 注册 2007-10-31 13:18 18年会员 UID 101283 性别 男
状态 离线
sed "/^$/d" 文件.txt
单独执行这个,确实能把所有空行删除掉。
第 4 楼
发表于 2008-08-17 11:54 · 中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023 发帖 5,017 注册 2007-05-31 19:39 19年会员 UID 89899 性别 男
状态 离线
sed -e :a -e "/\\$/N; s/\\\n//; ta" 可以将行首为“\”的文本合并到上一行
你听别人说的?还是自己亲自试验过?
第 5 楼
发表于 2008-08-17 12:51 · 中国 山东 济宁 联通
初级用户
★★
积分 154 发帖 67 注册 2007-10-31 13:18 18年会员 UID 101283 性别 男
状态 离线
是自己试验过
这个是把行尾为“\”的下一行合并到上一行
第 6 楼
发表于 2008-08-17 13:03 · 中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023 发帖 5,017 注册 2007-05-31 19:39 19年会员 UID 89899 性别 男
状态 离线
这样可以吗?
sed "/^$/d" a.txt|sed -e :a -e "/\\$/N; s/\\\n/\\/; ta"|sed ":a;$!N;s/\n|/|/;ta;P;D"
第 7 楼
发表于 2008-08-17 13:34 · 中国 山东 济宁 联通
初级用户
★★
积分 154 发帖 67 注册 2007-10-31 13:18 18年会员 UID 101283 性别 男
状态 离线
不行 命令无效
样本如下,最终求生成9条不含空行的文本,
文本中数据行的第一位是已经编好的序号。
[ Last edited by youaoyi on 2008-8-17 at 04:01 PM ]
第 8 楼
发表于 2008-08-17 13:45 · 中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023 发帖 5,017 注册 2007-05-31 19:39 19年会员 UID 89899 性别 男
状态 离线
按照你的规则,应该是10行啊,"徐"和"秀清"中间的那个换行不符合删除要求啊。
第 9 楼
发表于 2008-08-17 14:54 · 中国 山东 济宁 联通
初级用户
★★
积分 154 发帖 67 注册 2007-10-31 13:18 18年会员 UID 101283 性别 男
状态 离线
是的 整理例子时 忘记在这条数据后“徐”之后加上“\”了,抱歉。
已经更改了附件
第 10 楼
发表于 2008-08-17 15:48 · 中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023 发帖 5,017 注册 2007-05-31 19:39 19年会员 UID 89899 性别 男
状态 离线
你的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 楼
发表于 2008-08-17 16:03 · 中国 山东 济宁 联通
初级用户
★★
积分 154 发帖 67 注册 2007-10-31 13:18 18年会员 UID 101283 性别 男
状态 离线
不是的 麻烦下载下附件 a2.txt
原来的是我手工录入的,可以达到目的。
但是第10条之后的是原本的数据,就不行了。
第 12 楼
发表于 2008-08-17 16:05 · 中国 山东 济宁 联通
初级用户
★★
积分 154 发帖 67 注册 2007-10-31 13:18 18年会员 UID 101283 性别 男
状态 离线
第 13 楼
发表于 2008-08-17 16:16 · 中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023 发帖 5,017 注册 2007-05-31 19:39 19年会员 UID 89899 性别 男
状态 离线
你是说"徐慧"那一行对吧,那里有一个Windows下不可见的字符,你用16进制编辑器打开看看就知道了。
你把"|徐慧|"删除,重新输入一遍就可以了。
第 14 楼
发表于 2008-08-17 16:18 · 中国 山东 济宁 联通
初级用户
★★
积分 154 发帖 67 注册 2007-10-31 13:18 18年会员 UID 101283 性别 男
状态 离线
是的,但是象这种情况在文本中非常非常多,
这种不可见的字符,能否在sed处理时一并删除掉呢?
数据量很大,拜托了。
第 15 楼
发表于 2008-08-17 16:19 · 中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023 发帖 5,017 注册 2007-05-31 19:39 19年会员 UID 89899 性别 男
状态 离线
你的文本文件是不是从Linux或者Unix系统里面拷过来的?
论坛跳转:
— 请选择 —
站务公告 & 版主讨论
意见反馈 & 网友交流
DOS学习入门 & 精彩文章 (教学室)
DOS疑难解答 & 问题讨论 (解答室)
DOS启动盘 & LOGO技术 (启动盘室)
DOS批处理 & 脚本技术(批处理室)
DOS媒体世界 & 网络技术 (多媒体室)
DOS汉化世界 & 中文系统 (中文化室)
DOS开发编程 & 发展交流 (开发室)
DOS软件下载 & 游戏分享 (下载室)
GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区
其它操作系统综合讨论区
WinPE、PowerShell及其它命令行系统专区
贴图灌水、文学娱乐专区
网络日志(Blog)
论坛回收站
├ 链接失效,待修正