2014-11-20 155 views
0

你好,我有一個非常簡單的問題,我想從這個聲明正則表達式

1+1+1+1+1+1=6 

我曾嘗試grep的聲明

僅搜索等號(=)前的最後一個「1 + 1」
`grep '.+' 'text.txt'` 

返回

1+1+1+1+1+ 

,因爲它突出了所有的+符號。我相信我需要創建一個最小範圍,如: grep '.+{4,}' 'text.txt'這不起作用,任何人都可以解釋爲什麼?有解釋的解決方案將不勝感激。

由於

+0

不grep的返回整條線路時,發現該字符串? – sln 2014-11-20 21:07:35

回答

1

得到最後+ -expression你可以使用grep -o和管道將進入tail -1

grep -o '[0-9]+[0-9]' <<< '1+1+1+1+2+1=6' | tail -1 

此正則表達式匹配的數量[0-9](0〜9之間),其次是文字+標誌,然後再一個數字。這將匹配表達式字符串的多個部分。 -o選項在單獨的行上打印每個匹配,並且tail選擇這些行中的最後一行。

如果你有一個文件text.txt表達,只需使用:

grep -o '[0-9]+[0-9]' text.txt | tail -1 
+0

謝謝,這個工程,但我真的不明白它是如何做到這一點。爲什麼0-9 + 0-9?編輯 - 我看到你編輯你的評論來解釋它。乾杯! – user3423572 2014-11-20 20:52:01

+0

@ user3423572我會添加一個解釋。 – 2014-11-20 20:52:34

1

+是一個元字符,意思是「1個或多個先前的比賽」。當你說.+你說的是「任何角色,然後是一個或多個角色」。

如果您想要搜索文字元字符,則必須使用反斜槓進行轉義。

grep '.\+' text.txt 
+1

這可能會因系統和您正在使用的grep系列而異 - 「+」是基本正則表達式的_normal_字符,_unless_它會轉義爲元字符= grep == grep -G''a +'發現文字'a +'但是grep'a \ +'會在一個序列中找到一個或多個'a';而'egrep' =='grep -E''a''+'已經是元字符,所以grep -E'a +'找到一個或多個'a',但grep -E'a \ +'轉義meta'+'和匹配文字'a +' - 基於'man 1 grep'作爲OS X上的「** BSD **常用命令」。Linux上man 1 grep的在線頁面告訴我它是一樣的,但是我沒有測試過。 – 2014-11-20 21:23:50