#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
, так странно. grr4. Тем не менее, я ценю ваши усилия. Я погуглил sed, и это выглядит как очень полезный инструмент для изучения. Я обязательно рассмотрю это. На данный момент я использовал
tr
решение, работавшее очень красиво. Ваше решение также создало копию всех файлов, разделенных запятыми, с-e
расширением. например, предположим, что у меня был filefilename.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
forvim
. Когда я погуглилrunning multiple commands from command line with vim
,ex
появилось. Спасибо, что придерживаетесь ответа vim, 1