2017-01-08 14 views
0

だから私はegrepのに適していますこの正規epressionを作り、それが仕事に行ってます:sedの正規表現

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

私はsedのではなく、そのが動作していない何らかの理由でそれに取り組んでみました。

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

誰かが私はそれで問題が何であるかを理解するのに役立つ可能性があり、どのように私はegrepのではなく、SEDと同様に、正規表現を使用することができ、またはバックトラックとどのようにsedの作品を説明する場合は?

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

しかし、あなたはsedの中で、拡張rexexpを​​求めるならば、それは簡単です::

+1

使用 '-r'(または' - E')オプションを使用して拡張正規表現フレーバを有効にします。 –

+2

sedでは '\ |'でなければなりませんか? – melpomene

答えて

0

垂直バー(交替)もエスケープする必要があり

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

'-r'はGNU sedで、' -E'はBSDとGNU(文書化されていない)のために働いています。 – andlrc

+1

'vertical bar'は交代と呼ばれています。 – andlrc

+0

@andlrc注が追加されました。ありがとう。 – sorontar