2009-10-17 117 views
16

与文字星号的线 “*” 试图匹配的grep

$ echo "$STRING" | egrep "(\*)" 

并且还

$ echo "$STRING" | egrep '(\*)' 

和无数其它变型。我只想匹配行中任何位置包含文字星号的行。

+1

我通常只是不断添加斜线,直到我得到我想要的。 :) – 2009-10-17 03:17:16

+2

你的两个例子都适用于我(也可以使用删除的括号)。 – 2009-10-17 22:26:42

回答

16

尝试一个字符类,而不是

echo "$STRING" | egrep '[*]' 
+0

在使用GnuWin32的Windows上,您可以使用'grep [*] file.txt'。 – 2013-07-17 23:12:18

+0

...除非在您运行该目录的目录中有一个名称为'*'的文件。这个教训(不是特别从这个例子,但通常)是总是引用你的正则表达式,无论多么微不足道。 – tripleee 2016-11-10 06:57:08

1

下面就来匹配一个星号的一种方法:

$ echo "*" | grep "[*]" 
* 
$ echo "*" | egrep "[*]" 
* 
$ echo "asfd" | egrep "[*]" 
$ echo "asfd" | grep "[*]" 
$ 

结束语括号中的表达式通常让您轻松捕捉单个特殊字符;例如,这也适用于右括号或连字符。

要小心,当这不是一个支架组:

$ echo "hi" | egrep "*" 
hi 
$ echo "hi" | grep "*" 
$ 
+1

你的例子显示了为什么我发现egrep的这种行为令人不快。如果你想用grep做字面字符串搜索,只需把它放在引号中。为什么我会**想要为所有的事情祈祷? unix称这个程序为'cat';-)我讨厌egrep强制你将正则表达式字符括起来,即使它们用双引号引起来。咆哮结束。谢谢! – DaveParillo 2009-10-17 15:13:59

+2

@DaveParillo:grep和egrep都不知道你传递它们的模式是否被引用,因为在[e] grep启动之前引号是由shell解释的。区别在于grep和egrep在模式以“*”开始时的响应方式,这在技术上是畸形的(“*”是后缀)。试试'grep“。*”'你会发现它匹配了所有东西。如果你想要一个文字(非正则表达式)的搜索,可以用'fgrep'代替。 – 2009-10-17 22:22:15

5

用途:

grep "*" file.txt 

cat file.txt | grep "*" 
+0

既然你可以做第一个,第二个与猫是没有必要的。 – ghostdog74 2009-10-17 04:33:31

+0

我听到你。许多人似乎喜欢使用cat将文件串流到各种程序中,即使它通常是多余的。我只是认为我会加入它来让这个例子看起来更加熟悉。 – DaveParillo 2009-10-17 15:07:35

+0

这些都不在GNUWin32下的窗口中工作。 – Itsme2003 2017-01-17 06:49:14

1
echo "$STRING" | fgrep '*' 

fgrep用于匹配特殊字符。