2014-10-29 54 views
0

我試圖讓我的文件名沒有使用我在SO上找到的正則表達式的擴展名。正則表達式是:在bash中應用正則表達式

(.+?)(\.[^.]*$|$) 

我試試這個命令行

echo TestFileName.1.0.0.2.zip | grep "(.+?)(\.[^.]*$|$)" 

上,我什麼也沒有在命令行。如果我嘗試用這個表達式:

echo TestFileName.1.0.0.2.zip | grep "Test" 

我確實看到了TestFileName.1.0.0.2.zip被打印到控制檯測試以紅色突出顯示。當我在本網站上嘗試我的數據時:http://rubular.com/r/LNrI4inMU1

它似乎工作。我在bash中使用正則表達式錯誤嗎?謝謝。

+0

您在rubular鏈接正則表達式是錯的.. – 2014-10-29 15:44:20

回答

1

您正在使用擴展正則表達式; grep使用的標準正則表達式語言不支持你想要做的事情。更改grep爲grep -E並且匹配將起作用。這指定你的正則表達式是擴展的。

$ echo TestFileName.1.0.0.2.zip | grep -E "(.+?)(\.[^.]*$|$)" 
TestFileName.1.0.0.2.zip 

有關常規和擴展正則表達式之間區別的更多信息,請參閱this link

0

添加-PPerl的正則表達式)參數你的grep與-o僅匹配)一起。

$ echo TestFileName.1.0.0.2.zip | grep -oP "(.+)(?=\.)" 
TestFileName.1.0.0.2 
1

使用bash的正則表達式:

s='TestFileName.1.0.0.2.zip' 
[[ "$s" =~ ^(.*)\.[^.]+$ ]] && echo "${BASH_REMATCH[1]}" 
TestFileName.1.0.0.2