为什么s / $ /,/ g会替换第一个字符?

时间:2013-03-11 14:53:25

标签: sed

OS Ubuntu 12.04

Shell bash

为什么这个sed命令

sed -e 's/$/,/g' test.in

替换test.in中的5

以下是test.in

的内容

52147398,9480,12/31/2011 23:22,101049000,LNAM,FNAM,80512725,43,0,75,1/1/2012 6:45,101049000

以下是运行sed的结果

,2147398,9480,12/31/2011 23:22,101049000,LNAM,FNAM,80512725,43,0,75,1/1/2012 6:45,101049000

我想在1010489000

之后添加一个逗号

更换日期 - 时间格式后,使其位于yyyy-mm-dd hh:mm:ss format,现在

s/$/,/g

按预期工作。这是因为sed挂起了mm / dd / yyyy hh:mm格式吗?

2 个答案:

答案 0 :(得分:1)

$ cat test.txt | sed 's/$/,/g'
52147398,9480,12/31/2011 23:22,101049000,LNAM,FNAM,80512725,43,0,75,1/1/2012 6:45,101049000,

也许该文件已损坏?尝试复制/粘贴到新文件中......

也试试,

$ hexdump test.txt
hexdump test.txt
0000000 35 32 31 34 37 33 39 38 2c 39 34 38 30 2c 31 32
0000010 2f 33 31 2f 32 30 31 31 20 32 33 3a 32 32 2c 31
0000020 30 31 30 34 39 30 30 30 2c 4c 4e 41 4d 2c 46 4e
0000030 41 4d 2c 38 30 35 31 32 37 32 35 2c 34 33 2c 30
0000040 2c 37 35 2c 31 2f 31 2f 32 30 31 32 20 36 3a 34
0000050 35 2c 31 30 31 30 34 39 30 30 30 0a            
000005c

第一个字符应为0x35。

答案 1 :(得分:1)

可能你的文件是DOS格式。在换行符之前的回车将导致逗号被写为行上的第一个字符,覆盖现有字符(在本例中为5)。

首先转换为Unix格式:

tr -d '\r' < file > newfile