sed添加其他列

时间:2013-02-08 11:38:42

标签: character-encoding sed

我想在标签分隔文件中添加一列。 该文件如下所示:

#> cat /tmp/myfile
Aal     Fisch_und_Fleisch
Aalsuppe        Fisch_und_Fleisch

我想要的方式是通过sed,匹配整行,将其与新列一起打印出来。但是,附加列写在行的中间而不是结尾:

#> cat /tmp/myfile | sed 's#^\(.*\)$#\1\t1#g'
Aal     1isch_und_Fleisch
Aalsuppe1       Fisch_und_Fleisch

当我使用一些手动创建的线进行完整性检查时,它可以正常工作:

#> echo -e "aaaaaaaaaa\taaaaaaaaaaaa\nbbbbbbb\tbbbbbbbb" | sed 's#^\(.*\)$#\1\t1#g'
aaaaaaaaaa      aaaaaaaaaaaa 1
bbbbbbb bbbbbbbb        1

我猜这可能是编码/换行问题,这是file所说的:

#> file /tmp/myfile
/tmp/myfile: ASCII text, with CRLF line terminators

如果是编码/换行问题,我该怎么做呢?

2 个答案:

答案 0 :(得分:3)

我无法重现您的确切问题,但之前见过类似的事情。基本上,CRLF行结尾可能会在视觉显示中引起奇怪,因为CR部分(回车)可以使光标移动到同一行的开头,而不是新行的开头。最简单的可能就是切换到Unix风格的结局。

要切换到Unix风格的结尾,请使用

之一
dos2unix
tr -d '\r'

总的来说,像是

cat /tmp/myfile | dos2unix | sed 's#^\(.*\)$#\1\t1#g'

如果您需要切换回来,可以使用unix2dos

答案 1 :(得分:1)

这可能适合你(GNU sed):

sed 's/$/\t1/' file