Я использую ex-режим vim в скрипте для выполнения регулярных выражений vim и подстановки текстовых файлов.
ex $NAME <<EOEX
:%s/<.\{-}>//g
:%s/\[.\{-}\]//g
:%s/ / /g
:%s/^Contents$
:%s/^\d.*$
:%s/ (.\{1,4\})//g
:g/^$\n^$/d
:x
EOEX
У меня были проблемы с регулярным выражением :%s/ ([^)]\{-}[^\d0-\d1000].\{-})//g
(не показано).Я использую его, чтобы отфильтровать наборы скобок и их содержимое, когда в нем находится символ со значением больше 1000.Это выражение удаляло бы все наборы скобок и содержимое, когда они помещались в команды ex, указанные выше, поэтому мне пришлось назвать его следующим образом:
vim $NAME -c ':%s/ ([^)]\{-}[^\d0-\d1000].\{-})//g' -c ':wq'
, который работает нормально.Кто-нибудь понимает, почему он работает, когда ему передается vim с параметром -c, а не как команда в режиме ex?
(Дополнительный вопрос: что означает синтаксис << 'EOEX ...EOEX '</em> делать? Я не могу найти для него никакой документации. РЕДАКТИРОВАТЬ: Насколько я понимаю, использование <<' EOEX ... EOEX '</em>это Здесь документ и EOEX переносит строковый литерал, который передается команде ex $ NAME. Насколько мне кажется, имя идентифицированной упаковки (в моем случае EOEX) является произвольным)