regex - 如何编写这个 grep 正则表达式

标签 regex shell grep

if [ '`echo "$url" | grep (\.tar\.gz|\.tar\.bz2|\.zip|\.rar|\.7z)$`' ] ; then

语法错误,我只想检查文件扩展名。

最佳答案

首先,您需要删除 '',否则测试只是一个始终计算为 true 的字符串。您需要将正则表达式放在引号中,因为 bash 会解释括号。您还需要使用 egrep(相当于 grep -E)。

if [ `echo "$url" | egrep "(\.tar\.gz|\.tar\.bz2|\.zip|\.rar|\.7z)$"` ] ; then

您还可以通过将 . 分解为组并将 tar.{gz,bz2} 分组来缩短正则表达式:

if [ `echo "$url" | egrep "\.(tar\.(gz|bz2)|zip|rar|7z)$"` ] ; then

对于 future ,请注意 bash 给你的错误,它告诉你很多:bash: syntax error near unexpected token ( suggests that error is around the (,我刚刚向您展示的正是错误所在。

Jonathan's answer提供有关改进测试的更多提示。

关于regex - 如何编写这个 grep 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4527395/

相关文章:

用于移动包含文件的目录的 Linux 脚本

python - Python中的Perl兼容正则表达式(PCRE)

sql - 在 SAS Proc SQL 语句中使用 Perl 正则表达式

linux - 统计最近 7 天内文件中出现的次数

linux - 删除文件中包含模式的字符串

linux - 使用特定部分的 shell 从属性文件中获取值

java - 复杂字符串的正则表达式

javascript - 最多 6 个字符的混合数字的正则表达式验证

iphone - 编辑应用程序的 .plist 文件

linux - 创建 shell 脚本以在不正确关机的情况下重新启动 linux