grep 和朋友是否有办法匹配字符串,就像 shell 文件名匹配而不是正则表达式一样

grep 和朋友是否有办法匹配字符串,就像 shell 文件名匹配而不是正则表达式一样

实际上,我正在尝试搜索包含“文件名”的文本文件,并希望进行匹配,就像 shell 文件通配符生效一样。

Shell 文件通配符比正则表达式简单得多,所以我需要某种

grep "data??.*" < list_of_filenames

如果我可以用 AWK 做到这一点,我会得到加分,例如

awk -F/ '$NF ~ /data??.*/ {print $0}' < list_of_filenames

当由 / 分隔的行的最后一部分与模式“data??.*”匹配时打印该行

答案1

任何 globs 能做的事情都可以用正则表达式来表达。所以尽管你的问题的答案是否定的,像 globs 这样的工具grep只能处理字符串和正则表达式,但这不应该是个问题。正则表达式是一种比 globs 更强大的工具。

对于您问题中的例子,您想要以 开头的内容data,然后是任意两个字符,然后是 a,.然后是 0 个或多个字符,直到行尾(如果用作 glob,这就是您的表达式将匹配的内容),等效的正则表达式是:

^data..\..*

因此,您可以在grep或中使用它(顺便说一下,awk您不需要,当 awk 中某些内容计算为真时,默认操作是打印当前行):print

awk -F/ '$NF ~ /^data..\..*/' list_of_filenames

相关内容