Shell

GNU 或 BSD Sed 中的正則表達式交替/或運算符 (foo|bar)

  • February 23, 2022

我似乎無法讓它發揮作用。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

引用自:https://unix.stackexchange.com/questions/145402