2012-11-23 249 views
3

我试图对典型的g ++命令行进行一些修改。我正在尝试构造一个正则表达式来寻找-o object_filename.o构造。为了测试我的匹配模式,我使用空字符串作为替换在sed中启动它。但预期这是行不通的,因为它消除了什么......正则表达式替换

$echo "-o toto.o" | sed 's/-o [^ ]+//'
-o toto.o

回答

2

你缺少一个-E标志; without it, + is not treated as a regex meta-character

$echo "-o toto.o" | sed -E 's/-o [^ ]+//' 

上面产生一个空输出,如所预期。

+0

很大。我在linux上使用gnu sed。 “-r”在我的情况下似乎是正确的选择。 –

+1

是'-E'是'-r'的别名,但通常最好使用'-E'来实现可移植性! –

1

如果我理解正确的话那么sed -E 's/-o.+?\.o//'应该做你想要什么:

$ cat file 

g++ .. -o object_filename.o some more options 
g++ .. -o object1.o some more options 
g++ .. -o foo_bar.o some more options 

$ sed -E 's/-o.+?\.o//' file 

g++ .. some more options 
g++ .. some more options 
g++ .. some more options