2017-01-08 173 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