2017-02-03 21 views
-1

Я пишу бесконечный цикл в Баш:

while : 
do 
    (whatever) 
done 

Однако, когда я пытаюсь вставить «Done» линию таким образом

vi -c "$s/$/\rdone\r/g" -c "w!" -c "q!" 

Что я получаю то, что «$ S/$/\ rdone \ r/g "не является командой редактора. Однако это прекрасно работает, пока я нахожусь на gvim.

Есть ли у кого-нибудь идеи, почему это происходит? Я что-то делаю неправильно?

+0

Что именно vim говорит вам, что это не команда редактора? –

+1

Vim кажется необычным выбором для этой задачи. Почему бы не sed или awk? –

ответ

0

vi - древний инструмент. У меня нет его копии, поэтому я не могу проверить вашу команду в vi, но ваша команда отлично работает для меня, если я использую vim. Попробуйте сделать это вместо:

vim file -c "$s/$/\rdone\r/g" -c "w!" -c "q!" 

Кроме того, в качестве примечания, команды w и q могут быть объединены для

vim file -c "$s/$/\rdone\r/g" -c "wq!" 

и флаг глобалам (/g) является ненужным, поскольку $ может соответствовать только один раз на линии.

vim file -c "$s/$/\rdone\r" -c "wq!" 

Это должно быть немного более эффективным.

+1

Это работает? –

+0

@JoshLee Ах, я вижу проблему сейчас. Это работало отлично для меня, потому что я пробовал это на окнах, а не в bash. Я не понимал, что у Баша были проблемы с двойными кавычками. – DJMcMayhem

3

Просто заменить двойные кавычки одинарными из них:

vim yourfile -c '$s/$/\rdone\r' -c 'wq!' 

Двойные кавычки разобран Баш первым, и это особенно проблема с $ знаками.