2011-04-12 65 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