【发布时间】:2017-08-06 10:18:21
【问题描述】:
我正在使用一个 shell 脚本,我需要在其中区分 tar.gz、gz|bz 等。
我首先提取文件的扩展名,然后尝试使用case 匹配它,我的第一个案例是*tar*,它应该匹配扩展名中带有tar 的文件,因为它们可以用相同的命令。
问题是我试图匹配 gz bz2 等的下一组语句。我需要一个匹配 bz 或 gz2 的 case 模式,但同时也检查没有tar 在扩展中。
我对 shell 模式匹配一无所知,写了这个[!(tar).*(bz2|bz)$](请不要笑)
任何帮助将不胜感激。
【问题讨论】:
-
$是正则表达式语法,*tar*是 glob (shell) 语法。case使用 glob 语法。为了在 glob 中使用!,您必须启用extglob。为什么要用括号? -
@LaurentG 我不知道如何继续。尝试混合正则表达式,失败。
标签: linux bash shell unix pattern-matching