2011-04-12 106 views
2

我试图找到一种方法来用标签空格\t替换逗号,,或者实际上它也可以是单个空格。我想用BASH来做这个,我想知道Vim可以完成这样的任务吗?用许多文件中的标签空格替换逗号

我知道我能为一个文件,做到这一点通过命令行手动或:

vi [file] -c :%s/\,/\t/g 

有没有可能做到这一点上的文件,如一个循环:

for i in *; do [vi command here]; done 

感谢您的帮助

+0

vi命令的问题在于它在运行后输入文件。所以我不认为这是适当的命令在循环中使用 – Amit 2011-04-12 20:42:11

+0

如果你们可以想到一个更简单的方式顺便说一句,请让我知道! – Amit 2011-04-12 20:43:49

+1

你有没有试过sed? sed“s/\,/ \\ t/g”your_file >> modif_your_file – 2011-04-12 20:44:33

回答

5

tr可能比vi此任务一个更好的选择:

for i in * 
do 
    cat $i | tr ',' '\t' > $i.tmp 
    mv $i.tmp $i 
done 
+0

工作得很好,谢谢。 – Amit 2011-04-12 20:54:00

5

不完全是六,但我认为更合适

for f in * ; do sed -i -e 's/,/\t/g' $f ; done 

对于vi也是如此(就像你的例子)。但更短的方法是

sed -i -e 's/,/\t/g' * 
+0

这没有奏效,我得到一个错误,说'sed:1:“corrlength_N_10.csv”:命令c期望\后跟文本' – Amit 2011-04-12 20:45:58

+0

命令c?你确定你照原样复制了吗?我将编辑添加-e选项,也许这将有所帮助。 – 2011-04-12 20:48:26

+0

是的'-e'修正了错误,但是现在它删除了逗号并用't'替换了它们,而不是'\ t',太奇怪了。 grr – Amit 2011-04-12 20:50:03

1

是,VIM就可以这样做非常好。一个技巧是将其作为ex而不是vim来启动它。这是同一个程序,ex只是vim的链接,但是当它作为ex启动时,它会在CLI中而不是在屏幕模式下启动。

so ross$ for i in /tmp/f?; do 
> ex $i << \eof 
> g-,-s// /g 
> x 
> eof 
> done 
+0

我真的需要考虑使用'ex'作为'vim'。当我搜索''用命令行运行多个命令与vim'时,'ex'出现了。感谢您坚持使用vim的答案+1 – Amit 2011-04-12 20:57:17