X=http://www.example.com/; echo "blah" | sed "s/^/$X/"
sed: -e expression #1, char 11: unknown option to `s'
Как правильно проэскейпить (+обезвредить в ней возможные injection'ы) переменную, вставляемую в регэксп к sed'у?
Нужно сделать это автоматически, т.к. в отличие от этого простого примера, $X берётся из вводимого пользователем значения, и может быть равна вообще чему угодно.
Нужно экранировать (это слово переводится так) символы "\", "/", "&"; а также заменить перевод строки на "\n". Последнее верно для gnu sed, но неверно для некоторых других версий. Символ "\" нужно экранировать первым, чтобы случайно не заэкранировать те бакслэши, которые мы добавим сами ))
Нужно экранировать (это слово переводится так) символы "\", "/", "&"; а также заменить перевод строки на "\n". Последнее верно для gnu sed, но неверно для некоторых других версий.
Это в общем понятно, но чем и как именно это сделать? С помощью sed не получится - ведь для этого, неэкранированную придётся подставить в параметр sed, и собственно приходим к тому, с чего и начали.
Нужно сделать это автоматически, т.к. в отличие от этого простого примера, $X берётся из вводимого пользователем значения, и может быть равна вообще чему угодно.
есть ещё вариант - создайте файл с нужными sed-командами, а затем просто выполните его как sed скрипт. В некоторых случаях это оптимальное решение. Кроме того, в sed скриптах можно использовать любые кавычки (в отличие от одностроков, в которых использовать кавычки нельзя, ведь сам sed скрипт в кавычках).