2012-11-23 299 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