0

操作系统 Ubuntu 12.04

壳牌狂欢

为什么这个 sed 命令

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

替换5in test.in?

这是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 格式吗?

4

2 回答 2

1

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

先转换成 Unix 格式:

tr -d '\r' < file > newfile
于 2013-03-11T21:34:05.917 回答
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。

于 2013-03-11T15:38:14.047 回答