Замените запятые пробелом во многих файлах - PullRequest
2 голосов
/ 13 апреля 2011

Я пытаюсь найти способ заменить запятые , пробелом с вкладками \t или, фактически, это может быть также один пробел Я хотел бы сделать это с помощью BASH, и мне было интересно, может ли Vim выполнить такие задачи?

Я знаю, что могу сделать это вручную или через командную строку для одного файла с:

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

Можно ли сделать это в цикле файлов, например:

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

Спасибо за вашу помощь

Ответы [ 3 ]

5 голосов
/ 13 апреля 2011

tr, вероятно, лучше, чем vi для этой задачи:

for i in *
do
   cat $i | tr ',' '\t' > $i.tmp
   mv $i.tmp $i
done
5 голосов
/ 13 апреля 2011

не совсем vi, но я считаю более подходящим

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

Будет также с vi (как в вашем примере).Но более короткий путь -

sed -i -e 's/,/\t/g' *
1 голос
/ 13 апреля 2011

Да, vim может делать это довольно хорошо.Одна хитрость заключается в том, чтобы запустить его как ex вместо vim.Это та же самая программа, ex - это просто ссылка на vim, но при запуске как ex она появляется в CLI, а не в режиме экрана.

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