Как использовать разные разделители для команды sed substitute?
Я пишу сценарий оболочки для создания некоторых файлов конфигурации. Я должен заменить некоторые шаблоны в файлах, и один шаблон должен быть заменен путем.
Итак, мой вопрос: есть ли способ заменить мой веб-путь заполнителя на путь без установки обратной косой черты перед косой чертой?
Может быть, есть другой инструмент для этого?
2 ответа
Вы можете использовать альтернативный разделитель регулярных выражений в качестве шаблона поиска, используя обратную косую черту:
sed '\,some/path,d'
И просто используйте его как для s
команда:
sed 's,some/path,other/path,'
Вы, вероятно, хотите защитить другие метасимволы, хотя; это хорошее место, чтобы использовать Perl и quotemeta
или эквиваленты в других языках сценариев.
От man sed
:
/regexp/
Строки соответствия, соответствующие регулярному выражениюregexp
,
\cregexpc
Строки соответствия, соответствующие регулярному выражениюregexp
,c
может быть любым символом, кроме обратной косой черты или новой строки.
s/regular expression/replacement/flags
Подставьте строку замены для первого экземпляра регулярного выражения в пространстве шаблона. Любой символ, кроме обратной косой черты или новой строки, может использоваться вместо косой черты для разделения RE и замены. Внутри RE и замены сам разделитель RE может использоваться в качестве литерального символа, если ему предшествует обратная косая черта.
Когда есть косая черта/
в исходной строке или замещающей строке нам нужно экранировать ее, используя\
. Следующая команда работает в Ubuntu 16.04(sed 4.2.2).
sed 's/\/foo\/bar/\/baz\/qux/' file