gpt4 book ai didi

regex - 我的 sed 正则表达式有什么问题(在 egrep 中有效,但在 sed 中无效)?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:40:23 24 4
gpt4 key购买 nike

我想从我的 Clojure 源代码中删除类型提示,所以我尝试了:

echo "(def ^Integer a 1)" | egrep '\^\w+ '

并且它成功匹配了类型提示。

接下来,我尝试了:

echo "(def ^Integer a 1)" | sed s/\^\w+//g

但是 sed 不会将类型提示替换为空。

我的正则表达式有什么问题?

最佳答案

几乎所有版本的 sed 都实现了所谓的 POSIX 基本 正则表达式,而不是扩展 正则表达式。 egrep 中的“e”代表……扩展。猜猜它实现了哪种正则表达式。 :) 基本正则表达式和扩展正则表达式之间的一大区别是 + 只是扩展正则表达式中的一个元字符。 一些基本 RE 的实现接受具有相同含义的 \+,但你不能移植地依赖 sed 支持它。

此外,\w 甚至不是 POSIX 扩展正则表达式语法的一部分;它是一种 Perl 主义,后来被广泛采用(例如被 Python 和 Javascript),但 AFAIK 尚未在任何地方正式标准化。

这里你需要的结构是

echo "(def ^Integer a 1)" | sed 's/\^[A-Za-z0-9][A-Za-z0-9]*//g'

不,没有更短的方式来编写可移植的。

关于regex - 我的 sed 正则表达式有什么问题(在 egrep 中有效,但在 sed 中无效)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13114211/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com