Shell
GNU 或 BSD Sed 中的正則表達式交替/或運算符 (foo|bar)
我似乎無法讓它發揮作用。GNU sed 文件說要轉義管道,但這不起作用,也不能使用沒有轉義的直管道。添加括號沒有區別。
$ echo 'cat dog pear banana cat dog' | sed 's/cat|dog/Bear/g' cat dog pear banana cat dog $ echo 'cat dog pear banana cat dog' | sed 's/cat\|dog/Bear/g' cat dog pear banana cat dog
預設情況下
sed
使用不包含交替運算符的POSIX Basic Regular Expressions 。|
您可以將其切換為使用Extended Regular Expressions,其中包括|
替換,-E
(或-r
在某些實現的某些舊版本中)。您可以使用:echo 'cat dog pear banana cat dog' | sed -E -e 's/cat|dog/Bear/g'
它將適用於兼容的系統。(
-e
可選地標記 sed 腳本本身 - 您可以將其省略,它只是防止某些類型的錯誤)移植到非常舊
sed
的 s 很複雜,但如果需要,您也可以切換到它,它在任何地方都使用 ERE。awk