das nervt mich jetzt schon seit ein paar Jahren.
„Dies oder das abgleichen“ funktioniert.
„Zeilenanfang abgleichen“ funktioniert.
„Zeilenende abgleichen“ funktioniert.
„Zeilenanfang oder Zeilenende abgleichen“ nicht so sehr.
Alles auf 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
Antwort1
Dies kann ein Fehler in sed
der Implementierung von MacOS sein.
Ihre Syntax funktioniert bei mir unter FreeBSD 12 und Ubuntu 18:
$ sed -E 's/(^|$)/X/g'
Xhello worldX
Vielleicht reicht dieser Workaround für Ihre Zwecke aus, bis der Fehler behoben ist:
$ echo "hello world" | sed -E -e 's/^/X/' -e 's/$/X/'
Xhello worldX
Angesichts Ihres Kommentars zu einer komplexen Ersetzungszeichenfolge kann das oben Gesagte auf Kosten einer etwas höheren Komplexität noch etwas weiter verallgemeinert werden:
$ 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