Ваша проблема в том, что у вас есть разделитель /
в строке замены, поэтому sed
предполагает, что это конец вашей замены, и что >
, следующий за ним, является флагом.
Если ваш sed
достаточно современный, просто используйте другой символ-разделитель, такой, который не в строке замены:
pax$ echo hello | sed -e 's/e/<br />/'
sed: -e expression #1, char 9: unknown option to `s'
pax$ echo hello | sed -e 's?e?<br />?'
h<br />llo
В качестве альтернативы, вы можете избежать обидного символа, но я стараюсь избегать этого, так как это приводит к чрезмерным пилообразным sed
командам, таким как /\/\/\/\/\/\
.
Другая вещь, которую вы можете не заметить, - это попытка использовать \n
в своем регулярном выражении, поскольку sed
в любом случае работает на линиях. Если вы намереваетесь просто убрать возврат каретки и вставить разрывы строк HTML, тогда следующая команда sed
может быть лучше:
s?\r$?<br />?