Visual Studio Codeで重複する行を削除するにはどうすればよいですか?


117

次のテキストがあるとします。

abc
123
abc
456
789
abc
abc

すべての「abc」行を削除して、1つだけ保持したい。並べ替えてもかまいません。結果は次のようになります。

abc
123
456
789

回答:


223

行の順序が重要でない場合

行がアルファベット順に並べ替えられていない場合は、次の手順を実行します
(この関連質問に基づいて:正規表現を使用してファイルから重複する行を見つけて削除するにはどうすればよいですか?

  1. Control+F

  2. 「置換モード」を切り替えます

  3. 「正規表現を使用」(.*記号の付いたアイコン)を切り替えます

  4. 、検索フィールドに入力し^(.*)(\n\1)+$

  5. 置換」フィールドに、$1

  6. すべて置換ボタン(「すべて置換」)をクリックします。

行の順序重要なのでソートできない場合

この場合は、VS Code以外の解決策を使用するか(こちらを参照)、または-ドキュメントがそれほど大きくなく、[すべて置換]ボタンをスパム送信してもかまわない場合は、前の手順に従いますが、手順4および5に従います。これらを入力してください:(ソートせずに特定の重複する行を削除に
基づく)

注意:行が多すぎるファイル(1000以上)のブロック。VSコードがクラッシュする可能性があります。場合によっては空白行が導入されることがあります。

  • 検索((^[^\S$]*?(?=\S)(?:.*)+$)[\S\s]*?)^\2$(?:\n)?

  • と置き換えます:$1

次に、重複するオカレンスが存在する回数だけ「すべて置換」ボタンをクリックします。

ボタンをクリックしたときに行数の減少が止まれば十分です。ドキュメントの最後の行に移動して、それを監視します。


4
((^[^\S\r\n]*?(?=\S)(?:.*)+$)[\S\s]*?)^\2$(?:\r?\n)?vscodeがクラッシュしました。1つのファイルで229行の検索を実行しました。:(
Hickory420 2018

@ Hickory420私のマシンで1000行(長さ20文字、ランダム)でテストしたところ、クラッシュはありませんでしたが、実際には、各パスで数秒間100%のCPU負荷でスレッドがブロックされています。ええ、これは大きなファイルにはほとんど実用的ではありません。
Marc.2377

これをありがとう。正規表現について説明してください^(.*)(\n\1)+$。重複する行を削除した後、csvの最初の列が重複しているすべての行を確認し、正規表現を変更します。
Urvah Shabbir

1
うわー、私は正規表現がかなり得意だと感じていて、これはまだ私の心を吹き飛ばしました、素晴らしい答えです!!
electrovir

@UrvahShabbir、その正規表現の説明は、リンクされたQ&Aにあります。鉱山は\r?、他の答えからのビットが本当に必要ではないという点でのみ異なります。
2377年

65

これは非常に興味深い拡張です:Transformer

特徴:

  • ユニークなライン
  • 新しいドキュメントとしての一意の行
  • フィルターライン
  • 新しいドキュメントとして行をフィルター
  • 行を並べ替え
  • 行を長さで並べ替え
  • カーソルに合​​わせる
  • CSVを調整
  • コンパクトCSV
  • 新しいドキュメントにコピー
  • 行を選択
  • JSONとしての行
  • トリムライン
  • 重複する行を新しいドキュメントとしてカウントする
  • マクロ

重複する行を削除する場合:

  • ドキュメントから重複する行を削除します

  • 選択されている場合、または選択されていない場合は現在のブロックで動作します

私は "Unique Lines"コマンド以外にはあまり遊んだことがありませんが、かなりうまくできているようです(マクロレコーダーを試すなど)。


25

@ Marc.2377の返信に追加します。

順序が重要で、重複する行の最後だけを保持することを気にしない場合、重複する空でない行のみを削除する場合は、次の正規表現を検索します。

^(.+\n)(?=(?:.*\n)*?\1)

重複する空行も削除したい場合は、*代わりに+

^(.*\n)(?=(?:.*\n)*?\1)

何も入れ替えない。

入力済みの検索および置換ボックスのスクリーンショット

これは1行を取り、さらにいくつか(おそらく0)の行を探し、その後にまったく同じ行を探します。取られた行を削除します。

これは、1回限りの正規表現です。置換ボタンをスパムする必要はありません。


素晴らしく簡潔
angus l

4
いいね。^(.+\n)(?=(?:.*\n)*?\1)代わりに、あなたの正規表現が予期していない場所で空の行を削除したので、それをお勧めします。とにかく賛成した。
Marc.2377

良いキャッチ…OTOH:重複する空の行も重複です;)
Skeeve

1
@Skeeveさあ、これはあなたの役に立つ答えのためのほんの少しの感謝とより良いコミュニティのためのすべて:)
Zaman

1
xxx(?=…)先読み一致です。したがって、「xxx」に続くものはすべて「…」に一致することを確認しますが、検索を進めません。(?:…)括弧の数に含まれない単なる括弧です。.*\n(場合によっては空の)行のパターンです。*つまり、何行もない場合もあります。?アスタリスクの後の(*)は、できるだけ少ない行数が必要であることを意味します。\1この式を、以下の効果が、我々は一致しないすべての行を先読みということである\1私たちはラインマッチングを見つけるまで\1。これで明らかになることを願っています。
スキーブ

22

同じ問題が発生し、Visual Studio Codeパッケージの「Sort lines」が見つかりました。詳細については、Visual Studio Codeマーケットプレイスを参照してください(例:行の並べ替え)。

このパッケージには、「並べ替え(一意)」オプションがあり、それが私のために行われました。行頭/行末の空白に注意してください。行が一意であると見なされるかどうかに影響します。



1
拡張機能には重複したエントリを削除する機能がなくなったようです。それを@ Marc-2377の回答と組み合わせると、私にとってはうまくいくようです。
Dan Atkinson

12

DupChecker拡張機能をインストールし、を押してF1「重複チェック」と入力します。

重複をチェックし、削除するかどうかを尋ねます。


11

検索して正規表現に置き換えてください。

  • 検索: ^(.+)((?:\r?\n.*)*)(?:\r?\n\1)$

  • 交換: $1$2

最初のグループにいくつかの差異を導入することが可能です。


-3

実際にはVisual Studio Codeではありませんが、機能すれば機能します。

  1. 新しいExcelスプレッドシートを開く
  2. データを列に貼り付けます
  3. [ データ ]タブに移動します
  4. データの列を選択します(まだ選択していない場合)。
  5. [ 重複の削除]をクリックします(バーの中央にあります)
  6. クリックOKして重複を削除します。

あなたがVisual Studio Codeを指定したので、それは最良の答えではありませんが、私が言ったように:それが機能する場合、それは機能します:)


Visual Studio Codeから直接呼び出すことができるスクリプト提供することで、より関連性を高めることができます。つまり、このプロセスを自動化します。可能かどうかはわかりませんが、公開されているCOMインターフェイスを介してExcelを呼び出すスクリプトです。これは、他のアプリケーションを活用してきちんとした処理を行う例となるため、この回答の価値がはるかに高くなります。
Peter Mortensen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.