文件路径的通配符在 grep 中不起作用

文件路径的通配符在 grep 中不起作用

我需要 grep 这样的单词:

ABC-DEF
AB2-DEF
AB3-DEF
AB-DEF

所以我正在尝试:

grep AB*-DEF
grep -w -AB*-DEF
grep -w AB*DEF

但他们都没有工作。

答案1

*正则表达式中的内容与文件名 glob 不同。它表示 0 个或多个先前的字符/模式。所以你的例子会寻找Athen 0 或更多Bthen-DEF

.正则表达式中的意思是“任何字符”,因此您可以使用以下方法修复您的模式

grep 'AB.*DEF'

答案2

就您的模式而言,仅匹配预期的字符串是最安全的:

grep 'AB.\{0,1\}-DEF' file.txt

或者

grep -E 'AB.?-DEF' file.txt

.匹配任何单个字符,?\{0,1\}匹配前一个标记零次或一次,因此总共.?.\{0,1\}将匹配 之前的零个或一个字符-DEF

如果使用AB.*-DEFor AB.*DEF,grep将贪婪地匹配非预期的字符串,例如:

ABCG-DEF
ABCGLHHJKH90-DEF

答案3

您可以使用:

grep 'AB.*-DEF' file.txt

答案4

正则表达式中的通配符由 shell 扩展。 shell 将它们视为文件名元字符。所以,你必须告诉 shell不是将它们评估为文件名元字符,并通过在元字符之前使用单引号、双引号或反斜杠字符引用它们来完成此操作。然后,shell 将表达式本身发送到grep处理正则表达式的实用程序。

相关内容