Как использовать разные разделители для команды 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
Другие вопросы по тегам