Java正则表达式和sed不一样吗...?

5
获取以下字符串:
00543515703528
00582124628575
0034911320020
0034911320020
005217721320739
0902345623
067913187056
00543515703528

在Java中应用此表达式:^(06700|067|00)([0-9]*)

我的意图是从字符串开头删除前导的"06700、067和00"

在Java中,这很好,第2组始终具有我想要的数字,但在sed中情况并非如此:

$ cat strings|sed -e 's/^\(06700|067|00\)\([0-9]*\)/\2/g'
00543515703528
00582124628575
0034911320020
0034911320020
005217721320739
0902345623
067913187056
00543515703528

我到底缺了什么?
谢谢,
f.
2个回答

5

当使用扩展正则表达式时,您还需要省略在()之前的\。以下方式适用于我:

sed -r 's/^(06700|067|00)([0-9]*)/\2/g' strings 

注意,不需要单独调用 cat

3
我相信你的问题是这样的:

sed默认使用BRE:sed的默认行为是支持基本正则表达式(BRE)。要使用本页面描述的所有功能,请设置-r(Linux)或-E(BSD)标志以使用扩展正则表达式

来源

如果没有此标志,则|字符会被字面解释。尝试这个例子:

echo "06700|067|0055555" | sed -e 's/^\(06700|067|00\)\([0-9]*\)/\2/g'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接