【发布时间】:2010-11-07 08:17:28
【问题描述】:
我正在尝试在 linux/bash 的特定文件中搜索子字符串“abc”
所以我这样做:
grep '*abc*' myFile
它什么也不返回。
但如果我这样做:
grep 'abc' myFile
它正确返回匹配项。
现在,这对我来说不是问题。但是,如果我想用 grep 查找更复杂的字符串,比如
*abc * def *
我将如何使用 grep 来完成它?
【问题讨论】:
-
grep 本身在大多数平台上不支持通配符。您必须使用 egrep 才能使用通配符。 Shell 有不同的语法。 shell 中的“*”是。在 egrep 中,它是一个操作符,它说“0 到许多以前的实体”。在 grep 中,它只是一个普通字符。
-
@PanCrit:
*在 grep 和 egrep 中的含义相同:它是一个 量词,表示前面的原子的零个或多个。这与 shell 使用的 通配符 是完全不同的概念。 -
@AlanMoore 感谢您的更新。我不知道这是什么时候改变的,但是现代的
grep支持大多数基本的正则表达式是正确的。过去,您必须使用 egrep 才能获得比扁平字符串更多的东西,但我看到 grep 已经进化了。