regex 在bash中应用正则表达式

dldeef67  于 2023-02-17  发布在  其他
关注(0)|答案(3)|浏览(131)

我试图得到我的文件名没有它的扩展名使用正则表达式我发现堆栈溢出.正则表达式是:

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

我在命令行上尝试执行此操作

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中应用正则表达式错误吗?

pcww981p

pcww981p1#

您使用的是扩展正则表达式;grep使用的标准正则表达式语言不支持您尝试执行的操作。将grep更改为grep -E,匹配将正常工作。这指定您的正则表达式是扩展的。

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

请参阅this link了解更多关于常规正则表达式和扩展正则表达式之间区别的信息。

ibrsph3r

ibrsph3r2#

使用BASH正则表达式:

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

uqxowvwt3#

-PPerl-regexp)参数与-o(* 仅匹配 *)沿着添加到grep中。

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

相关问题