Editar:
Usando seu novo requisito:
sed 's/\o47[^\o47]*\o47/\n&\n/g;:a;s/\(\n\o47[^\n]*\)--/X-X-X/;ta;s/\n//g' input file
Editar 2:
Para algumas versões do sed
que não gostam de ponto e vírgula:
sed -e 's/\o47[^\o47]*\o47/\n&\n/g' -e ':a' -e 's/\(\n\o47[^\n]*\)--/X-X-X/' -e 'ta' -e 's/\n//g' inputfile
Se o seu sed
também não suporta códigos de escape octal:
sed -e "s/'[^']*'/\n&\n/g" -e ':a' -e "s/\(\n'[^\n]*\)--/X-X-X/" -e 'ta' -e 's/\n//g' inputfile
Resposta original:
Normalmente, você deve usar aspas simples para circundar o script sed
, para não ter que escapar de caracteres que possam ser especiais para o shell. Mesmo que não seja necessário, neste caso, é um bom hábito desenvolver.
sed 's/--/X-X-X/g' inputfile
ou
var="hell --this -- world is --beaut--iful"
newvar=$(echo "$var" | sed 's/--/X-X-X/g')
Sem o modificador g
, a substituição é executada na primeira correspondência em cada linha de entrada. Quando g
é usado, cada correspondência em cada linha de entrada é substituída. Você também pode fazer a substituição de determinadas correspondências:
$ var="hell --this -- world is --beaut--iful"
$ echo "$var" | sed 's/--/X-X-X/2'
hell --this X-X-X world is --beaut--iful