我想在标签分隔文件中添加一列。 该文件如下所示:
#> 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
如果是编码/换行问题,我该怎么做呢?
答案 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