Я хотел бы редактировать файлы, переданные в конвейерный ввод, используя vim неинтерактивным способом или редактировать файлы на месте (аналогично sed
)
Несколько примеров с использованием sed
:
$ sed -i'.bak' s/foo/test/g file # Edit file in-place.
$ cat file | sed s/foo/test/g # Parse file in pipeline.
Однако я мог прочитать здесь , что:
sed
является редактором S Tream ED , а не редактором файлов. Тем не менее, люди повсюду склонны злоупотреблять им за попытку редактирования файлов. Он не редактирует файлы.
Во-вторых, некоторые параметры, такие как редактирование на месте ( -i
), переносимы.
Как такая же функциональность может быть достигнута в vim?
file
из вашей второй командной строки.Ответы:
Для редактирования файла без интерактивного использования
ex
(vi
это визуальный режимex
) вы можете использовать параметры+{command}
или-c {command}
параметры, которые позволяют вам выполнять команды vi после прочтения первого файла.Это
ex
стандартный редактор командной строки (похож наed
).Кроме того, следует использовать
vipe
(редактор конвейера команд Vim), который является частьюmoreutils
пакета, и он позволит вам запустить ваш редактор в середине конвейера Unix и редактировать данные, передаваемые между программами.Примеры
Простой стандартный ввод и вывод с использованием каналов может быть достигнут с помощью этого синтаксиса оболочки:
Вот простой пример, как распечатать файл после замены:
Еще примеры для редактирования файлов на месте:
Вы также можете использовать
-s {scriptin}
так, чтобы команды загружались из файла, например:или используя перенаправление ввода / вывода:
Чтобы отредактировать один файл и сохранить изменения в другом, проверьте следующие примеры:
Более практичные примеры.
Реальный живой пример из спецификации RPM :
Извлечение HTML-тегов :
Удаление тегов XML :
Извлеките тег стиля из заголовка и напечатайте проанализированный вывод:
Разобрать HTML с несколькими сложными правилами:
Еще больше примеров:
Смотрите также:
источник
vim '+:0,$s/foo/test/g' '+:wq! file2' file1
вместо этого.bufdo
. Несмотря на то, что Vim - это то, что установлено практически везде, стоит знать, что вы можете создавать сценарии редактирования файлов, используя только POSIX-совместимые функцииex
.ex
и действительно изучить это. Спасибо. Некоторое дальнейшее прочтение на эту тему (полное раскрытие: я написал это;) таково: поменять местами каждые четыре строкиex
и использовать-c
опцию . Вы можете добавить их в свой список ссылок внизу, если хотите. :)