Замените запятые пробелом с табуляцией во многих файлах

#bash #vim #vi #edit

#bash #vim #vi #Редактировать

Вопрос:

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

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

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

Возможно ли было бы сделать это в цикле файлов, таких как:

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

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

Комментарии:

1. Проблема с командой vi заключается в том, что она попадает в файл после его запуска. Поэтому я не думаю, что это подходящая команда для использования в цикле

2. Если вы, ребята, можете придумать более простой способ, кстати, пожалуйста, дайте мне знать!

3. вы пробовали sed? sed «s/,/\t/g» your_file >> modif_your_file

4. Если вам когда-нибудь действительно понадобится использовать vim, вы всегда можете передать ему команду на выход, но, как вы видели, это перебор для чего-то такого простого.

5. Я думаю, что для того, чтобы передать vim более одной команды, вам нужно использовать ex .

Ответ №1:

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

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

Ответ №2:

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

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

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

 sed -i -e 's/,/t/g' *
  

Комментарии:

1. Это не сработало, я получил сообщение об ошибке со словами sed: 1: "corrlength_N_10.csv": command c expects followed by text

2. команда c? Вы уверены, что скопировали его как есть? Я отредактирую, чтобы добавить опцию -e, возможно, это поможет.

3. Да, -e исправлены ошибки, хотя теперь запятые удалены и заменены на t , а не на t , так странно. grr

4. Тем не менее, я ценю ваши усилия. Я погуглил sed, и это выглядит как очень полезный инструмент для изучения. Я обязательно рассмотрю это. На данный момент я использовал tr решение, работавшее очень красиво. Ваше решение также создало копию всех файлов, разделенных запятыми, с -e расширением. например, предположим, что у меня был file filename.cvs , после выполнения вашей команды у меня был другой набор файлов с filename.csv-e . Так странно.

5. Хм .. Вы определенно не совсем сделали то, что я написал… Нет причин, по которым он должен создавать -e -files…

Ответ №3:

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

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

Комментарии:

1. Мне действительно нужно изучить использование ex for vim . Когда я погуглил running multiple commands from command line with vim , ex появилось. Спасибо, что придерживаетесь ответа vim, 1