2017-01-08 219 views
0

所以我做了這個規律epression與egrep的運作良好,並能夠完成任務:sed和正則表達式

egrep "(^|[ ]+)([^ ]+)([ ]+)\2([ ]+|$)" $1 

我試圖與它的sed但由於某種原因它不工作的工作。

sed '/\(^|[ ]\+\)\([^ ]\+\)\([ ]\+\)\2\([ ]\+|$\)/!d' $1 

如果有人可以幫助我瞭解什麼是它的問題,我如何能在egrep的,但使用sed使用正則表達式等,或用回溯解釋如何SED的作品?

+1

使用'-r'(或' - E')選項來啓用擴展的正則表達式風格。 –

+2

在sed中不應該是'\ |'嗎? – melpomene

回答

0

豎線(交替)也應該被轉義:

sed '/\(^|[ ]\+\)\([^ ]\+\)\([ ]\+\)\2\([ ]\+|$\)/!d' "$1"  # Yours. 
sed '/\(^\|[ ]\+\)\([^ ]\+\)\([ ]\+\)\2\([ ]\+\|$\)/!d' "$1" # correct. 

但是,如果你在sed呼籲延長rexexp更容易:

sed -E '/(^|[ ]+)([^ ]+)([ ]+)\2([ ]+|$)/!d' "$1" 
+2

值得注意的是'-r'是GNU sed,而'-E'適用於BSD和GNU(未記錄) – andlrc

+1

'vertical bar'被稱爲交替。 – andlrc

+0

@andlrc註釋添加。謝謝。 – sorontar