Редактировать:
Используя ваше новое требование:
sed 's/\o47[^\o47]*\o47/\n&\n/g;:a;s/\(\n\o47[^\n]*\)--/\1X-X-X/;ta;s/\n//g' input file
Изменить 2:
Для некоторых версий sed
которые не любят точки с запятой:
sed -e 's/\o47[^\o47]*\o47/\n&\n/g' -e ':a' -e 's/\(\n\o47[^\n]*\)--/\1X-X-X/' -e 'ta' -e 's/\n//g' inputfile
Если ваш sed
также не поддерживает восьмеричные коды escape:
sed -e "s/'[^']*'/\n&\n/g" -e ':a' -e "s/\(\n'[^\n]*\)--/\1X-X-X/" -e 'ta' -e 's/\n//g' inputfile
Оригинальный ответ:
Обычно вы должны использовать одинарные кавычки, чтобы окружить сценарий sed
чтобы вам не пришлось экранировать символы, которые могут быть особенными для оболочки. Хотя в этом случае нет необходимости, это хорошая привычка для развития.
sed 's/--/X-X-X/g' inputfile
или же
var="hell --this -- world is --beaut--iful"
newvar=$(echo "$var" | sed 's/--/X-X-X/g')
Без модификатора g
замена выполняется при первом совпадении в каждой строке ввода. Когда используется g
, каждое совпадение в каждой строке ввода заменяется. Вы также можете сделать замену для конкретных матчей:
$ var="hell --this -- world is --beaut--iful"
$ echo "$var" | sed 's/--/X-X-X/2'
hell --this X-X-X world is --beaut--iful