与文字星号的线 “*” 试图匹配的grep
$ echo "$STRING" | egrep "(\*)"
并且还
$ echo "$STRING" | egrep '(\*)'
和无数其它变型。我只想匹配行中任何位置包含文字星号的行。
与文字星号的线 “*” 试图匹配的grep
$ echo "$STRING" | egrep "(\*)"
并且还
$ echo "$STRING" | egrep '(\*)'
和无数其它变型。我只想匹配行中任何位置包含文字星号的行。
尝试一个字符类,而不是
echo "$STRING" | egrep '[*]'
在使用GnuWin32的Windows上,您可以使用'grep [*] file.txt'。 – 2013-07-17 23:12:18
...除非在您运行该目录的目录中有一个名称为'*'的文件。这个教训(不是特别从这个例子,但通常)是总是引用你的正则表达式,无论多么微不足道。 – tripleee 2016-11-10 06:57:08
下面就来匹配一个星号的一种方法:
$ echo "*" | grep "[*]"
*
$ echo "*" | egrep "[*]"
*
$ echo "asfd" | egrep "[*]"
$ echo "asfd" | grep "[*]"
$
结束语括号中的表达式通常让您轻松捕捉单个特殊字符;例如,这也适用于右括号或连字符。
要小心,当这不是一个支架组:
$ echo "hi" | egrep "*"
hi
$ echo "hi" | grep "*"
$
你的例子显示了为什么我发现egrep的这种行为令人不快。如果你想用grep做字面字符串搜索,只需把它放在引号中。为什么我会**想要为所有的事情祈祷? unix称这个程序为'cat';-)我讨厌egrep强制你将正则表达式字符括起来,即使它们用双引号引起来。咆哮结束。谢谢! – DaveParillo 2009-10-17 15:13:59
@DaveParillo:grep和egrep都不知道你传递它们的模式是否被引用,因为在[e] grep启动之前引号是由shell解释的。区别在于grep和egrep在模式以“*”开始时的响应方式,这在技术上是畸形的(“*”是后缀)。试试'grep“。*”'你会发现它匹配了所有东西。如果你想要一个文字(非正则表达式)的搜索,可以用'fgrep'代替。 – 2009-10-17 22:22:15
用途:
grep "*" file.txt
或
cat file.txt | grep "*"
既然你可以做第一个,第二个与猫是没有必要的。 – ghostdog74 2009-10-17 04:33:31
我听到你。许多人似乎喜欢使用cat将文件串流到各种程序中,即使它通常是多余的。我只是认为我会加入它来让这个例子看起来更加熟悉。 – DaveParillo 2009-10-17 15:07:35
这些都不在GNUWin32下的窗口中工作。 – Itsme2003 2017-01-17 06:49:14
echo "$STRING" | fgrep '*'
fgrep
用于匹配特殊字符。
我通常只是不断添加斜线,直到我得到我想要的。 :) – 2009-10-17 03:17:16
你的两个例子都适用于我(也可以使用删除的括号)。 – 2009-10-17 22:26:42