我需要 grep 这样的单词:
ABC-DEF
AB2-DEF
AB3-DEF
AB-DEF
所以我正在尝试:
grep AB*-DEF
grep -w -AB*-DEF
grep -w AB*DEF
但他们都没有工作。
答案1
*
正则表达式中的内容与文件名 glob 不同。它表示 0 个或多个先前的字符/模式。所以你的例子会寻找A
then 0 或更多B
then-DEF
.
正则表达式中的意思是“任何字符”,因此您可以使用以下方法修复您的模式
grep 'AB.*DEF'
答案2
就您的模式而言,仅匹配预期的字符串是最安全的:
grep 'AB.\{0,1\}-DEF' file.txt
或者
grep -E 'AB.?-DEF' file.txt
.
匹配任何单个字符,?
并\{0,1\}
匹配前一个标记零次或一次,因此总共.?
和.\{0,1\}
将匹配 之前的零个或一个字符-DEF
。
如果使用AB.*-DEF
or AB.*DEF
,grep
将贪婪地匹配非预期的字符串,例如:
ABCG-DEF
ABCGLHHJKH90-DEF
答案3
您可以使用:
grep 'AB.*-DEF' file.txt
答案4
正则表达式中的通配符由 shell 扩展。 shell 将它们视为文件名元字符。所以,你必须告诉 shell不是将它们评估为文件名元字符,并通过在元字符之前使用单引号、双引号或反斜杠字符引用它们来完成此操作。然后,shell 将表达式本身发送到grep
处理正则表达式的实用程序。