【发布时间】:2015-02-25 07:57:33
【问题描述】:
在通用 shell 脚本中,我想使用 shell 模式匹配来过滤文本文件的行。
我在 files.txt 中有一个文件名列表:
file1.txt
file2.sh
file3.png
我在 patterns.txt 中有一个模式列表:
other_file.txt
file2.*
如果我在 patterns.txt 中有正则表达式,我可以这样做:
$ grep -v -f patterns.txt files.txt
但我想使用 shell 通配模式。我找到了 C 函数 fnmatch 但没有使用它的 shell/unix 命令。
【问题讨论】:
-
这可以在 shell 中完成,但它会 slooow。我建议您使用其他语言。
-
你能简单地将你的shell表达式翻译成正则表达式吗?甚至自动化这个翻译的基本版本也可能比替代方案更好。
-
我希望我只是错过了一个像 grep 这样的命令,它适用于 glob。翻译模式也并非易事。
-
@mirabilos 它应该在大多数 Linux 发行版 (/bin/sh)、BSD、MacOS、cygwin 和 msysgit 下运行。符合 POSIX 标准会很棒。