如何阻止bash在vim中的每个字母前添加^ @

时间:2016-05-09 08:38:16

标签: bash csv vim

在先前有效的代码中无故出现问题。

myfile.csv中有一些数据

MP 0,20,60,200,60,95,100,1,20,50,30,20,20,250,115,200,0,8,85,150,465817

MP 1,17.89,60,200,60,93.945,100,1,20,50,30,20,20,250,115,200,0,10,85,150,465927

MP 2,16.33,60,200,60,93.16,100,1,20,50,30,20,20,250,115,200,0,12,85,150,464987

MP 3,15.12,60,200,60,92.56,100,1,20,50,30,20,20,250,115,200,0,14,85,150,463440

...

我提取了我文件的最后25行

tail -n 25 myfile.csv > test1.txt

当我这样做时

cat test1.txt

...
MP 16,20,60,200,60,95,100,1,20,120,30,20,20,250,115,200,0,8,85,150,529469
MP 17,20,60,200,60,95,100,1,20,130,30,20,20,250,115,200,0,8,85,150,534335

没问题......但我想进入文本编辑器,每个字母都以^ @:

开头
vim test1.txt

^@M^@P^@ ^@0^@,^@2^@0^@,^@6^@0^@,^@2^@0^@0^@,^@6^@0^@,^@9^@5^@,^@1^@0^@0^@,^@1^@,^@2^@0^@,^@5^@0^@,^@3^@0^@,^@2^@0^@,^@2^@0^@,^@2^@5^@0^@,^@1^@1^@5^@,^@2^@0^@0^@,^@0^@,^@8^@,^@8^@5^@,^@1^@5^@0^@,^@4^@6^@5^@8^@1^@7^@

问题是想要进行模式搜索(该行的第一个单词)因为那个似乎不起作用

home > awk '/MP 0/{print}' test1.txt
home > 

此外我想在我的awk中添加一个参数:

home > cat mp
0
home > awk "/MP `cat mp`,/{print}" test1.txt
home > 

你知道这个错误来自哪里吗?

谢谢

修改

.csv文件在Excel 2007中保存为" CSV(DOS)"

将其保存为" CSV"它工作=>编码是不同的

否则,当在vim中打开它时,执行:e ++ enc = utf16以使用UTF-16编码重新加载文件,然后(假设nullbytes消失)执行:set fenc = utf-8并保存文件。 (谢谢你@L3viathan的回答)

1 个答案:

答案 0 :(得分:4)

我认为你的编码搞砸了。您的文件可能使用UTF-16编码保存,但由于某种原因缺少字节顺序标记(0xFEFF)。

在vim中打开它后,执行:e ++enc=utf16以使用UTF-16编码重新加载文件,然后(假设nullbytes消失)执行:set fenc=utf-8并保存文件。