这个问题已经困扰我好几年了。
“匹配这个或那个”有效。
“匹配行首”有效。
“匹配行尾”有效。
“匹配行首或行尾”,不太好。
全部在 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
答案1
这可能是 MacOSsed
实现中的一个错误。
您的语法在 FreeBSD 12 和 Ubuntu 18 下对我有效:
$ sed -E 's/(^|$)/X/g'
Xhello worldX
在修复该错误之前,也许这个解决方法足以满足您的需求:
$ echo "hello world" | sed -E -e 's/^/X/' -e 's/$/X/'
Xhello worldX
鉴于您对复杂替换字符串的评论,上述内容可以进一步概括,但代价是稍微复杂一些:
$ 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