regex - 如何在 mac os x (BSD) sed 上转义加号?

标签 regex macos bash sed grep

我正在尝试在 Mac 上使用 sed 查找和替换一个或多个出现的字符,sed 来自 BSD 通用命令。

我尝试:

echo "foobar" | sed -e "s/o+//g

期待看到:

fbar

但是我看到了

foobar

我当然可以手动扩展加号:

echo "foobar" | sed -e "s/oo*//g"

但是我需要做什么才能使加号正常工作?

最佳答案

使用 /g 标志,s/o//g 足以替换所有出现的 o。

为什么 + 没有按预期工作: 在旧的、过时的 re + 中是一个普通字符(以及 |, ?).您应该将 -E 标志指定给 sed 以使其使用现代正则表达式:

echo "foobar" | sed -E -e "s/o+//"
# fbar

来源:man 7 re_format

关于regex - 如何在 mac os x (BSD) sed 上转义加号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4453760/

相关文章:

macos - 有谁知道 Xamarin.Mac/Monomac 上 SQLite 的一个很好的例子吗?

正则表达式删除与第一个字符串匹配的行?

使用 or 运算符时,Python 正则表达式的模糊搜索不会返回所有匹配项

regex - 如何在从 Postgresql 中的字符串中删除停用词后删除引号和数字

javascript - mac os x python/JavaScript IDE,我可以在其中使用断点

c# - 跳过导航没有定义外键

mysql - Bash:当服务器出现故障时关闭 MySQL 连接

linux - 从终端更改 Ubuntu 12.04 中的系统代理设置

node.js - bash:bower:找不到命令,我不知道该怎么办

python - 不区分大小写的正则表达式返回原始模式