이것은 몇 년 동안 나를 괴롭히고 있습니다.
"이것 또는 저것과 일치"가 작동합니다.
"줄 시작 부분 일치"가 작동합니다.
"줄 끝 일치"가 작동합니다.
"줄 시작 또는 줄 끝 일치"는 그다지 많지 않습니다.
모두 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
이는 MacOS sed
구현의 버그일 수 있습니다.
귀하의 구문은 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