Esto me ha estado molestando desde hace un par de años.
"combinar esto o aquello" funciona.
"Hacer coincidir el comienzo de la línea" funciona.
"Hacer coincidir el final de la línea" funciona.
"coincidir con el principio o el final de la línea", no tanto.
Todo en MacOS.
echo "hello world" | sed -E 's/(h|d)/X/g'
Xello worlX
echo "hello world" | sed -E 's/(^)/X/g'
Xhello world
echo "hello world" | sed -E 's/($)/X/g'
hello worldX
echo "hello world" | sed -E 's/(^|$)/X/g'
Xhello world
Respuesta1
Esto puede ser un error en la implementación de MacOS sed
.
Tu sintaxis me funciona en FreeBSD 12 y Ubuntu 18:
$ sed -E 's/(^|$)/X/g'
Xhello worldX
Quizás esta solución sea suficiente para sus necesidades hasta que se solucione el error:
$ echo "hello world" | sed -E -e 's/^/X/' -e 's/$/X/'
Xhello worldX
Dado su comentario sobre una cadena de reemplazo compleja, lo anterior se puede generalizar un poco más, a expensas de un poco más de complejidad:
$ X='replacement text here'
$ printf "echo 'hello world' | sed -E -e 's/^/%s/' -e 's/$/%s/'" "$X" "$X" | sh
replacement text herehello worldreplacement text here