2016-02-11 164 views
0

我試圖顯示所有電話號碼與兩個不連續的「 - 」在其中。我試過這些表達式:Grep正則表達式

grep '[-]{2}' phones.txt 
grep '-{2}' phones.txt 
grep '.*[-].+[-].+$' phones.txt 
grep '^\d+[-]\d+[-]\d+$' phones.txt 

但是都沒有工作。這是我第一次使用正則表達式,我不知道我要去哪裏錯了

+0

'-'是否彼此相鄰?或者之間可以有其他角色。 – dave

+0

你想要電話號碼包含兩個連續的' - '字符或只有兩個電話號碼的任何地方:即12-34-56應該匹配? – miltonb

+0

你的第二次嘗試尋找一個空格,後跟一個連字符,後跟2個空格。 – Barmar

回答

1

你可以嘗試這樣的:

grep '^.*-.*-.*$' phones.txt 

這將尋找到-相鄰且並非如此。 -也可以在開始或結束。

如果你正在尋找將其限制爲數字,如:

123-555-3456 

即。在-是在「中間」,並通過數字分開,你可以用更嚴格:

grep '[0-9]\+-[0-9]\+-[0-9]\+' phones.txt 

在我的示例phones.txt

012-345-678 
012-345 
012-345- 
-012-345 

543838--499 
-- 
1-2-3 

匹配第二個模式如下:

012-345-678 
1-2-3 

我在用:grep(GNU grep)2.4.2

+0

第一個失敗的地方,數字以'-'結尾。 – iamauser

+0

@iamauser我注意到數字可以以第一種模式的破折號開始或結束。我已經修復了第二種模式。 – dave

0

非con連續或連續可與(--?)匹配。這是一個-字符,其後跟一個-,它可以存在零次或一次(可選地跟在後面)。