Skip to content

Remove Duplicate Lines

Paste any list — emails, URLs, log lines, CSV rows — and remove duplicates, sort alphabetically, trim stray whitespace and drop blank lines. Case-sensitive matching is a toggle, not the default, so "Apple" and "apple" count as the same line unless you say otherwise.

  • Remove duplicate lines, keeping the first occurrence
  • Case-sensitive toggle
  • Sort ascending or descending
  • Trim whitespace and drop blank lines
  • Runs fully client-side

Cleaner

Processed locally, nothing uploaded

Output

How to remove duplicate lines from a list

  1. 01

    Paste your list

    Any line-separated list works — emails, URLs, tags, log entries, CSV rows.

  2. 02

    Pick what to apply

    Turn on dedupe, sorting, whitespace trimming and blank-line removal independently — combine whichever you need.

  3. 03

    Check the counts

    The summary shows how many lines were removed, so a dedupe that did nothing is as visible as one that removed half the list.

Why case-sensitivity is the setting most people get wrong#

A list of emails, tags, or URLs collected from different sources almost always has inconsistent capitalization — "[email protected]" and "[email protected]" are the same address to every mail server that will ever receive them, but a case-sensitive dedupe treats them as two different lines and keeps both. Case-insensitive matching is the default here for that reason; the toggle exists for the genuine exceptions, like deduplicating code identifiers or file paths on a case-sensitive filesystem, where "Apple" and "apple" really are different things.

Which line survives when duplicates are removed#

When two lines are equal (after whichever comparison rule applies), the first occurrence in the original list is the one kept, and every later match is dropped. This matters when the duplicate lines are not perfectly identical in whitespace or trailing characters before the case-normalization is applied — whichever version appeared earliest in the pasted list is what survives.

Sorting uses locale-aware comparison, not raw character codes#

A naive sort compares strings by raw character code, which puts every uppercase letter before every lowercase letter ("Zebra" sorts before "apple", because Z has a lower code point than a) — not the order most people expect from an alphabetized list. This tool uses Intl.Collator, the same locale-aware comparison browsers use for user-facing text, so the result reads as a human would alphabetize it.

Frequently asked questions

Is deduplication case-sensitive by default?

No — "Apple" and "apple" are treated as duplicates by default, since that matches how most real lists (emails, tags, URLs) actually behave. Toggle case-sensitive mode on when the exact casing genuinely matters, like code identifiers.

When two lines are duplicates, which one is kept?

The first occurrence in the pasted list. Every later line that matches is removed, so the position of the surviving line is always the earliest one.

Does the sort order match a normal alphabetical list?

Yes — sorting uses locale-aware string comparison, the same kind browsers use for user-facing text, rather than raw character-code order, which would otherwise put every uppercase letter before every lowercase one.

Can I use this on something other than plain words, like URLs or log lines?

Yes — it works on any line-separated text, whatever the content of each line actually is.

Is my list sent anywhere?

No. Processing happens entirely in your browser — nothing is uploaded.

Developers

UUID Generator

Generate cryptographically random UUID v4 or time-ordered UUID v7, in bulk.

Developers

Base64 Encoder & Decoder

Encode and decode Base64 with correct UTF-8 handling, including the URL-safe alphabet.

Developers

ULID Generator

Generate ULIDs — sortable by creation time like UUID v7, but Crockford Base32 instead of hex.