2016-06-13 6 views
1

vimを使用して削除したい重複値を持つjsonファイルがあります。次に例を示します。vimで括弧内の重複する行を削除するには?

{ 
    { "greetings" : [ 
     "hello", 
     "hola" 
    ] 
    }, ... 
} 

{ 
    { "greetings" : [ 
     "hello", 
     "hello", 
     "hola", 
     "hola" 
    ] 
    }, ... 
} 

これまでのところ、私は正常にすべての重複行が最後にそれらを期待して削除することができました。余分な存在である「」重複行が互いに隣接しているので、あなたはカンマをオプションにするために、再度文字列に一致するように\1を使用し、,\?を使用することができ、それは私のマッチングを破壊し、私は

{ 
    { "greetings" : [ 
     "hello", 
     "hola", 
     "hola" 
    ] 
    }, ... 
} 
+1

はDUPあります隣接した線は互いに隣接していますか? – Fabricator

+0

はい。すべての複製は、新しい行にまとめられます。 –

答えて

0

で終わります:

:%s/^\(.\+\),\?\n\1\n/\1\r/gc 

検索を制限し、特定のブロックに交換する必要がある場合は、あなたが最初のブロックに一致するようにg/../を使用することができます。

:g/[\[^[\]*]/%s/^\(.\+\),\?\n\1\n/\1\r/g 
+0

または、よりわかりやすく: '%s; \ v(。\ +)、?\ n \ 1 \ n; \ 1 \ r' – DJMcMayhem

+0

@DJMcMayhem、私は '\ v'オプションについて知らなかった – Fabricator

+0

これは良いアプローチです。しかし、問題はブロックへの置換を制限することでした。提案した代替ソリューションは、すべての閉じ括弧も削除します。例えば'}、}' –

関連する問題