sed和正则表达式

时间:2017-01-08 21:24:17

标签: regex bash sed grep

所以我做了这个定期的表演,与egrep配合得很好,它完成了工作:

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

我尝试在sed上使用它,但由于某种原因它不起作用。

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

如果有人可以帮我理解它的问题是什么,我如何使用像egrep中的正则表达式但是使用sed,或解释sed如何与回溯一起使用?

1 个答案:

答案 0 :(得分:0)

垂直条(交替)也应该转义:

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

但是如果你在sed中调用扩展的rexexp会更容易:

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