Используя Ubuntu 12.04 и vim 2.22.0, почему внутри vim я буду использовать:
:9s/\d\+/1/
, чтобы изменить первую цифру упомянутой строки на 1, но не смог использовать То же самое с sed:
sed -i '9s/\d\+/1/' /home/file/foo
Я до сих пор не получаю ни ошибок, ни изменений в файле. Есть ли у нас какие-либо несоответствия между функциями команд vim и sed?
sed и vim не связаны (ну вроде как, но это далеко). Их команды замещения похожи, но далеко не идентичны. Оба они используют базовые регулярные выражения, но vim имеет свои расширения для него, а GNU sed имеет другие расширения для него.
\d
соответствует цифре в vim, в GNU sed она соответствует d
. Чтобы сопоставить цифру в sed, используйте [[:digit:]]
или [0-9]
(и они также будут работать в vim).
\+
также является расширением как в vim, так и в GNU sed. Стандартный способ сопоставить одно или несколько значений - использовать \{1,\}
.