Является ли замена конкретной строки в файле с помощью сценария bash, возможного в VIM или EX?

Я хотел бы изменить конкретную строку, например строку 5, в файле, используя конструкцию EOEX как я могу достичь своей цели? Фрагмент кода, который я использую для достижения своей цели, выглядит следующим образом:

 #!/bin/bash S=0.030 F=0.150 N=30 DIFF=`echo "scale=3; $F - $S" | bc -l` dw=`echo "scale=3; $DIFF / $N" | bc -l` is=`echo "scale=3; $S / $dw" | bc -l` if=`echo "scale=3; $F / $dw" | bc -l` ex ~/Desktop/Dropbox/MATLAB/FFT.m <<EOEX :5s/for*/for i = $S:$dw:$F/g :x EOEX 

Я сделал некоторые исследования и узнал, что обычно EOF (конец файла) используется here scripts для перенаправления I/O на стандартный ввод определенной команды (в моем случае это ex ). Я также узнал, что до тех пор, пока ключевые слова для начала и окончания одинаковы, вместо EOF можно использовать любое слово. Моя проблема заключается в том, что вместо желаемого эффекта, который заменяет строку другим for loop инициализатора for loop в Matlab этот скрипт не удаляет строку и не добавляет строку в конце пятой строки. Для справочных целей я также добавил файл FFT.m. Приносим извинения за неудобства, вызванные абстрактностью моего вопроса ранее. Обратите внимание, что я также открыт для использования другой программы для достижения желаемого эффекта, но мне интересно, почему этого не может быть достигнуто в ex или vim . Пожалуйста, нажмите здесь для скрипта Matlab.

One Solution collect form web for “Является ли замена конкретной строки в файле с помощью сценария bash, возможного в VIM или EX?”

Чтобы изменить строку 5 файла test_file на «hello world», используя ex и конструкцию EOEX (я полагаю, что вы имеете в виду «документ здесь»):

 ex test_file << EOEX 5c hello world . wq EOEX 

Вышеупомянутое также возможно с помощью ed , хотя обратите внимание, что POSIX ed не поддерживает команду wq . Вместо этого поставьте w и q на отдельные строки.

Использование sed (версия, поддерживающая параметр -i ) немного проще:

 sed -i '15 c hello world' test_file 
  • Показать строки состояния vim и tmux на одной строке
  • Команда Vim для вставки символа
  • Почему эти два vim autocmd перекрывают друг друга?
  • TERM = (linux | xterm) vi в xterm или проблема AAABBBBBBCCDDD
  • Автозаполнение адресов электронной почты в vim
  • Vim: установить «клавиши курсора» hjkl в wasd
  • vim, как настроить backspace и удалить ключи как в обычном режиме
  • Как изменить пару измененных тегов HTML в Vim?
  • xsel </ tmp / xselection не работает в скрипте
  • Визуальный метод визуализации Vim отличается от Windows и Linux?
  • Копия Vimdiff выше / ниже
  • Interesting Posts

    Управление графическим интерфейсом Gnome через Bash?

    как добавить файлы из папки в архив вместо самих папок?

    Clone установлена ​​с использованием аппаратной синхронизации RAID 0 + 1

    Разрешать только внутренние пароли ssh, всегда разрешать внешние ssh-логины с ключом

    Как установить PulseAudio в группы?

    Использовать ли только программный рендеринг программного обеспечения intel gpu (Mesa)?

    Как fsnotify влияет на производительность системы?

    копировать файлы с целевым именем на основе md5, используя find и xargs

    генерировать согласованный уникальный идентификатор машины

    Bash использовать альтернативный dotfile?

    Написание сценария для проверки, если результат команды «3»

    Правила rsync только для синхронизации конкретных субдиров в длинных путях

    awk: пустая строка с датой

    Два компилятора одной и той же версии ядра: одна загружается, одна не может найти корневое устройство

    команда cp, которая частично разрешает символические ссылки

    Linux и Unix - лучшая ОС в мире.