Editly

Опубліковано: 2026-05-17

Як видалити дублікати рядків у VS Code (і онлайн)

У VS Code немає вбудованої команди дедуплікації. Ось 5 методів — обхід через сортування, awk-однорядковик, PowerShell, розширення й браузерний інструмент — з порівнянням порядку, швидкості й крайових випадків.

Вікно термінала, де підсвічені й видалені дублікати рядків командою awk, сланцеве тло, зелений акцентний текст

VS Code вміє багато речей. Видалення дублікатів рядків — не одна з них, принаймні не рідно. У Command Palette немає пункту «Remove Duplicates». Ніколи й не було.

Якщо ти доігрався до роздутого конфіг-файлу, CSV з повтореними рядками чи лог-дампу, напханого однаковими записами, ти вже шукав команду, якої не існує. Ось пʼять методів, що реально працюють, упорядкованих за тим, коли по який тягнутися.


Метод 1: обхід через сортування (VS Code, без розширень)

Це підхід із нульовими залежностями. Він працює, коли порядок рядків не має значення — наприклад, записи .gitignore, списки залежностей, файли ключових слів.

  1. Відкрий файл у VS Code
  2. Виділи все: Ctrl+A (Windows/Linux) або Cmd+A (macOS)
  3. Відкрий Command Palette: Ctrl+Shift+P / Cmd+Shift+P
  4. Запусти Sort Lines Ascending (A→Z)
  5. Дублікати рядків тепер сусідні — вони візуально очевидні
  6. Для маленьких файлів: видали послідовні повтори вручну

Обмеження очевидне: це знищує твоє початкове впорядкування. Для .gitignore чи списку імпортів це нормально. Для лог-файлу, де важлива послідовність, це непрохідний варіант.


Метод 2: однорядковик у терміналі (порядок збережено)

Для файлів, де порядок важить, це правильний підхід. Одна команда, без редактора.

macOS / Linux — зберігає порядок:

awk '!seen[$0]++' input.txt > output.txt

Це елегантно. seen[$0] — це асоціативний масив із ключем за повним вмістом рядка. ! інвертує істинність — рядок друкується лише першого разу, коли трапляється. Кожен наступний дублікат тихо відкидається. Порядок збережено, нуль конфігурації.

Примітка щодо macOS: системний awk на macOS — це One True Awk, який може поводитися неочікувано зі складним Unicode-вмістом чи закінченнями рядків \r\n у стилі Windows. Якщо маєш справу з тим чи іншим, встанови GNU awk через Homebrew (brew install gawk) і підстав gawk замість awk у команді вище.

macOS / Linux — найшвидше, але порядок НЕ збережено:

sort -u input.txt > output.txt

sort -u — це реалізація на C із зовнішнім сортуванням злиттям. Для файлів понад 500 000 рядків вона помітно швидша за awk. Але вона впорядковує вивід за абеткою, що робить її неправильною для структурованих даних.

Windows PowerShell — зберігає порядок:

Get-Content .\input.txt | Select-Object -Unique | Set-Content .\output.txt

Select-Object -Unique лишає перше входження й відкидає наступні збіги. За поведінкою еквівалентно підходу з awk.


Метод 3: regex Find & Replace (лише послідовні дублікати)

Якщо твої дублікати йдуть поспіль, інструмент Пошук і заміна може зловити їх регуляркою. Цей патерн матчить послідовно повторені рядки:

^(.+)(\r?\n\1)+$

Замінити на: $1

У VS Code: Ctrl+H → увімкни regex (Alt+R) → встав патерн → заміни все. VS Code автоматично опрацьовує межі ^ і $ рядок за рядком у Find & Replace — окремий multiline-прапор не потрібен, але режим Regex має бути ввімкнений, інакше символи ^, $ і \n трактуються як літерали. Щоб ловити послідовні дублікати, що різняться регістром (наприклад, Error і error поспіль), вимкни Match Case (Alt+C) у панелі пошуку — інлайнові прапори (?i) у regex-рушії VS Code поводяться непослідовно між версіями й менш надійні за перемикач у панелі.

Критичне обмеження: це видаляє лише послідовні дублікати. Якщо line A зʼявляється на рядку 1 і рядку 100 з іншим вмістом поміж, ця регулярка проґавить його повністю. Підходи awk і sort -u сканують увесь файл незалежно від позиції.

Щодо синтаксису регулярок, груп захоплення й патернів lookahead — гайд з регулярних виразів: пошук і заміна покриває все, що треба, щоб адаптувати цей патерн до складніших сценаріїв.


Метод 4: розширення VS Code

Розширення «Remove Duplicate Lines» від Pauls0n додає рівно одну команду в Command Palette. Встанови його, виділи свій текст (чи весь файл), запусти команду — готово.

Компроміс: воно вимагає інсталяції й надання довіри. На машині, яку ти не контролюєш — корпоративний ноутбук, VPS, робоча станція колеги — це не завжди варіант. Для повторюваного робочого процесу на власній машині це найчистіше рідне рішення для VS Code.


Метод 5: браузерний інструмент (без налаштування, будь-яка машина)

Встав свій текст у наш інструмент Видалити дублікати — працює цілком у V8-рушії твого браузера, нуль даних кудись передається — і отримаєш миттєвий результат із контролами, яких методи в терміналі не дають:

  • Лишити перше чи лишити останнє входження (sort -u лишає «перше» довільно, на основі порядку сортування; тут це явно)
  • Перемикач без урахування регістру (без гімнастики з tolower() в awk)
  • Обрізати пробіли перед порівнянням (щоб " hello " і "hello" згорнулися в один рядок)
  • Прев'ю «до/після» зі зведенням за кількістю рядків

Для разової задачі чищення на будь-якій машині це найшвидший шлях. Відкрий браузер, встав, скопіюй результат.


Порівняння методів

МетодЗберігає порядокБез урахування регіструОбрізає пробілиЛише послідовніНалаштування
Обхід через сортування у VS CodeНіНіНіНіЖодного
awk '!seen[$0]++'ТакДодай tolower()gsub(/^[ \t]+|[ \t]+$/, "")НіUnix-термінал
sort -uНіпрапор -fНіНіUnix-термінал
PowerShell Select-Object -UniqueТакпрапор -CaseSensitiveНіНіWindows
Розширення VS CodeТакЗалежитьЗалежитьНіІнсталяція розширення
Видалити дублікати онлайнТакПеремикачПеремикачНіЖодного
Regex Find & ReplaceТакпрапор (?i)ВручнуТакЖодного

Дублікати рядків до й після дедуплікації — ліва колонка показує повторені червоні записи, права — чистий дедуплікований результат


Пастка пробілів

Це ловить розробників щоразу: "hello" і " hello " — не той самий рядок. Порівняння рядків за замовчуванням точне. Якщо твої дублікати мають непослідовні пробіли на початку чи в кінці — а це трапляється постійно зі вставленим вмістом, витягами з PDF та експортами з таблиць, — ти проженеш дедуплікацію й усе одно матимеш «дублікати».

Виправлення — спершу обрізати, а тоді дедуплікувати. Інструмент Видалити дублікати робить це чекбоксом. В awk:

awk '{gsub(/^[ \t]+|[ \t]+$/, "")} !seen[$0]++' input.txt > output.txt

gsub(/^[ \t]+|[ \t]+$/, "") зрізає пробіли й табуляції на початку й у кінці кожного рядка перед перевіркою на дублікат — не торкаючись нічого всередині рядка. Це означає, що значення, розділені табами, й поля CSV лишаються цілими. Утім, воно не зловить нерозривні пробіли (U+00A0) чи пробіли нульової ширини (U+200B) — ті переживають стандартне обрізання. Якщо чистиш текст, що прийшов із вставлення з PDF чи копіювання з вебу, спершу прожени його через Виправити пробіли, щоб прибрати невидимі символи, а тоді дедуплікуй.

Глибший погляд на те, чому вставлений текст узагалі приходить забрудненим, — у Як прибрати зайві пробіли з тексту онлайн, де розглянуто проблему витягання з PDF на основі координат і варіанти пробільних символів Unicode, які str.trim() тихо проґавлює.


Коли дублікати рядків — симптом, а не проблема

Якщо ти регулярно дедуплікуєш той самий файл, першопричина майже завжди — баг ідемпотентності вище за течією. Поширені патерни:

  • Cron-завдання, що дописує у файл замість перезаписувати його
  • Агрегатор логів без DISTINCT у його SQL-запиті
  • Стартовий скрипт, що повторно додає конфіг-записи, які вже існують
  • Злиття Git, що продублювало контекстні рядки в погано розв'язаному конфлікті

Дедуплікувати вручну — це пластир. Полагодити генератор — це виправлення. Прожени дедуплікацію раз, щоб почистити поточний стан, а тоді простеж назад, чому вхід узагалі продукує повтори.


Інсайт від сеньйора: завжди виводь у новий файл

🍌 Ніколи не запускай дедуплікацію просто на своїх продакшен-файлах .env чи конфігу застосунку без бекапу. Завжди спрямовуй вивід у новий файл — як у прикладах вище — і прожени швидкий diff input.txt output.txt, перш ніж замінювати оригінал. Легко випадково згорнути два рядки, що виглядають однаково, але несуть структурно різні значення (як-от два записи DATABASE_URL, що вказують на різні репліки). Спершу diff, заміна — другою.


Сортування після дедуплікації

Щойно дублікати зникли, можеш захотіти відсортувати рядки, що лишилися — корисно для файлів .env, списків імпортів чи словникових файлів, де абеткове впорядкування полегшує читабельність і дифи на код-рев'ю.

Інструмент Сортувати рядки це робить: A→Z, Z→A, найкоротші спершу, найдовші спершу чи випадкове перемішування через Fisher-Yates. Рекомендований порядок завжди — спершу дедуплікувати, потім сортувати, а не навпаки, бо інакше ти подаси відсортований вхід у порівняння, що може повестися не так, як очікуєш.


Часті запитання

Чи має VS Code вбудовану команду «Remove Duplicate Lines»?

Ні — станом на 2026 рік у VS Code немає рідної команди дедуплікації. Найближчі вбудовані можливості — це Sort Lines (доступна з Command Palette) і редагування кількома курсорами. Щоб видалити дублікати без розширень, спершу сортуєш, а тоді вручну видаляєш сусідні повтори — що ламається, якщо порядок рядків важливий. Для рішення в один клік скористайся інструментом Видалити дублікати за адресою /remove-duplicates або встанови розширення «Remove Duplicate Lines» від Pauls0n з VS Code Marketplace.

Чи зберігає видалення дублікатів початковий порядок рядків?

Лише деякі методи. Unix-команда `sort -u` сортує за абеткою І видаляє дублікати — початковий порядок знищується. Однорядковик `awk '!seen[$0]++'` зберігає перше входження кожного унікального рядка на його початковій позиції. PowerShell-овий `Select-Object -Unique` теж зберігає порядок. Онлайн-інструмент Видалити дублікати за адресою /remove-duplicates дає тобі обрати «лишити перше» чи «лишити останнє», обидва — зі збереженим порядком.

Як видалити дублікати рядків у VS Code без сортування?

Сам VS Code не вміє дедуплікувати, не зачепивши порядку. Твої варіанти зі збереженням порядку: (1) `awk '!seen[$0]++'` у терміналі (macOS/Linux), (2) `Get-Content file | Select-Object -Unique` у PowerShell, (3) онлайн-інструмент Видалити дублікати. Усі три лишають перше входження кожного рядка й тихо відкидають наступні дублікати.

Що взагалі спричиняє дублікати рядків?

Найпоширеніші джерела: вставлення того самого блоку двічі, конфлікти злиття Git, що дублюють контекстні рядки, агрегатори логів без клаузи DISTINCT, CSV-експорти з баз даних без дедуплікації й скрипти, що дописують у файл замість перезаписувати його. Патерн майже завжди — це баг ідемпотентності: операція виконалася над тим самим файлом більш ніж раз.

Як видалити дублікати рядків, що різняться лише пробілами?

Стандартна дедуплікація трактує ' hello ' і 'hello' як різні рядки, бо порівняння точне. Щоб згорнути дублікати, що різняться лише пробілами, обріж кожен рядок перед порівнянням. Інструмент Видалити дублікати за адресою /remove-duplicates має перемикач «Trim whitespace», який нормалізує пробіли на початку/в кінці перед порівнянням — без жодної гімнастики з регулярками.

Як дедуплікувати рядки без урахування регістру?

`sort -f -u` на Unix робить сортування + дедуплікацію без урахування регістру, трактуючи 'Hello' і 'hello' як той самий рядок. В awk нормалізуй через `awk '!seen[tolower($0)]++'`. Інструмент Видалити дублікати має перемикач без урахування регістру — увімкни його, і 'ERROR' та 'error' згорнуться в один запис.

Який метод дедуплікації найшвидший для дуже великих файлів (100k+ рядків)?

`sort -u` найшвидший для великих файлів — це реалізація на C із зовнішнім сортуванням злиттям, що опрацьовує 1 мільйон рядків менш ніж за 2 секунди на сучасній машині. Метод awk трохи повільніший, але зберігає порядок. Браузерні інструменти комфортно тягнуть до ~100k рядків; за цією межею накладні витрати памʼяті V8 додають затримку, і термінал стає кращим інструментом.

Спробуйте наш безкоштовний лічильник слів

Миттєво рахуйте слова, перевіряйте читабельність та аналізуйте текст.

Відкрити лічильник слів