Board logo

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

作者: beber    时间: 2016-5-30 09:52     标题: !!急救!!使用sed进行文本格式化的问题,请大侠指教!

本帖最后由 beber 于 2016-5-30 10:09 编辑

!!急救!!

使用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里面需要使用双引号
  1. 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

你可以先转换一下文件格式,然后再做处理:
  1. sed 's/\r//g'  sed_before.txt > sed_tmp.txt
  2. 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命令,可以先用它转换一下文本格式:
  1. dos2unix sed_before.txt
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2