找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 34343|回复: 11

[问题求助] !!急救!!使用sed进行文本格式化的问题,请大侠指教!

[复制链接]
发表于 2016-5-30 09:52:21 | 显示全部楼层 |阅读模式
!!急救!!

使用sed进行文本格式化的问题,本意是将多个空格整理为1个空格,但是在对原始文件sed_before.txt执行sed时定住了,查看结果文件sed_after.txt,发现在120行处不动了,使用set list命令也没看出来什么特别的地方,求助坛子里的各位大侠,这是什么原因?如何解决?

原始文件:sed_before.txt   
执行命令:sed 's/[ ][ ]*/ /g'  sed_before.txt > sed_after.txt
结果文件:sed_after.txt   

评分

参与人数 1PB -6 收起 理由
pcl_test -6 勿发笼统无意义的标题

查看全部评分

发表于 2016-5-30 22:34:28 | 显示全部楼层
Windows里面需要使用双引号
  1. sed -r "s/ +/ /g"  sed_before.txt > sed_after.txt
复制代码
如果还是有问题,换个sed版本试试:
http://www.bathome.net/s/tool/index.html?key=sed
 楼主| 发表于 2016-5-31 10:14:56 | 显示全部楼层
我是在linux上运行sed的,版本为sed-4.1.5-5.fc6

回复 2# gawk
发表于 2016-5-31 10:37:15 | 显示全部楼层
本帖最后由 gawk 于 2016-5-31 16:01 编辑

回复 3# beber


如果你的文件是从Windows直接复制到Linux的,由于两种系统文件格式不一样,会导致sed处理异常。
Windows文本行尾是 CR LF
Linux文本行尾是 LF
发表于 2016-5-31 10:41:17 | 显示全部楼层
你可以先转换一下文件格式,然后再做处理:
  1. sed 's/\r//g'  sed_before.txt > sed_tmp.txt
  2. sed -r 's/ +/ /g'  sed_tmp.txt > sed_after.txt
复制代码
发表于 2016-5-31 14:31:16 | 显示全部楼层
回复 4# gawk


    啊?啊?
 楼主| 发表于 2016-5-31 16:00:47 | 显示全部楼层
源文件就在执行sed的机器上,是linux系统,所以不存在拷贝时特殊字符的问题。

回复 4# gawk
 楼主| 发表于 2016-5-31 16:01:44 | 显示全部楼层
试过了,第1个命令正常执行,第2个命令还是卡住。

回复 5# gawk
发表于 2016-5-31 16:04:34 | 显示全部楼层
回复 7# beber


    你可以 cat -A sed_before.txt 看看文件行尾是什么符号,我这里用 CentOS 6.7 测试没有发现问题。
 楼主| 发表于 2016-6-1 15:00:35 | 显示全部楼层
行结尾都是 ^M$

回复 9# gawk
发表于 2016-6-1 22:09:23 | 显示全部楼层
回复 10# beber


    这说明它是Windows格式的文本
发表于 2016-6-1 22:33:21 | 显示全部楼层
如果你的Linux里面有dos2unix命令,可以先用它转换一下文本格式:
  1. dos2unix sed_before.txt
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 23:33 , Processed in 0.018993 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表