2009-10-17 189 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用於匹配特殊字符。