标题: [问题求助] !!急救!!使用sed进行文本格式化的问题,请大侠指教! [打印本页]
作者: beber 时间: 2016-5-30 09:52 标题: !!急救!!使用sed进行文本格式化的问题,请大侠指教!
!!急救!!
使用sed进行文本格式化的问题,本意是将多个空格整理为1个空格,但是在对原始文件sed_before.txt执行sed时定住了,查看结果文件sed_after.txt,发现在120行处不动了,使用set list命令也没看出来什么特别的地方,求助坛子里的各位大侠,这是什么原因?如何解决?
原始文件:sed_before.txt [attach]9851[/attach]
执行命令:sed 's/[ ][ ]*/ /g' sed_before.txt > sed_after.txt[attach]9851[/attach]
结果文件:sed_after.txt [attach]9852[/attach]
作者: gawk 时间: 2016-5-30 22:34
Windows里面需要使用双引号- sed -r "s/ +/ /g" sed_before.txt > sed_after.txt
复制代码
如果还是有问题,换个sed版本试试:
http://www.bathome.net/s/tool/index.html?key=sed
作者: beber 时间: 2016-5-31 10:14
我是在linux上运行sed的,版本为sed-4.1.5-5.fc6
回复 2# gawk
作者: gawk 时间: 2016-5-31 10:37
本帖最后由 gawk 于 2016-5-31 16:01 编辑
回复 3# beber
如果你的文件是从Windows直接复制到Linux的,由于两种系统文件格式不一样,会导致sed处理异常。
Windows文本行尾是 CR LF
Linux文本行尾是 LF
作者: gawk 时间: 2016-5-31 10:41
你可以先转换一下文件格式,然后再做处理:- sed 's/\r//g' sed_before.txt > sed_tmp.txt
- sed -r 's/ +/ /g' sed_tmp.txt > sed_after.txt
复制代码
作者: CrLf 时间: 2016-5-31 14:31
回复 4# gawk
啊?啊?
作者: beber 时间: 2016-5-31 16:00
源文件就在执行sed的机器上,是linux系统,所以不存在拷贝时特殊字符的问题。
回复 4# gawk
作者: beber 时间: 2016-5-31 16:01
试过了,第1个命令正常执行,第2个命令还是卡住。
回复 5# gawk
作者: gawk 时间: 2016-5-31 16:04
回复 7# beber
你可以 cat -A sed_before.txt 看看文件行尾是什么符号,我这里用 CentOS 6.7 测试没有发现问题。
作者: beber 时间: 2016-6-1 15:00
行结尾都是 ^M$
回复 9# gawk
作者: gawk 时间: 2016-6-1 22:09
回复 10# beber
这说明它是Windows格式的文本
作者: gawk 时间: 2016-6-1 22:33
如果你的Linux里面有dos2unix命令,可以先用它转换一下文本格式:复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |