Porównanie tekstów i Diff
Porównaj dwa teksty natychmiast w przeglądarce. Widok obok siebie, podświetlanie słów, eksport unified diff, opcje ignorowania wielkości liter/spacji/pustych wierszy. 100 % w przeglądarce — bez przesyłania.
Opcje ignorowania
Czym jest Text Diff?
Text diff to strukturalne porównanie dwóch dokumentów tekstowych, które znajduje najmniejszy zestaw wstawień i usunięć przekształcający jeden w drugi. Wynik czyni zmianę widoczną: zielony dla wierszy dodanych, czerwony dla usuniętych, obok siebie lub w postaci unified patch (format `---/+++/@@` używany przez `git`, GitHub i uniksowe polecenie `patch`).
Pod maską każdy nowoczesny diff to algorytm Longest Common Subsequence (LCS). Praca Eugene'a Myersa z 1986 roku o O((N+M)D) jest kanoniczną wydajną implementacją; klasyczne programowanie dynamiczne (używane tutaj, z obcinaniem wspólnych prefiksów/sufiksów) jest prostsze i działa świetnie dla typowych wejść webowych. Po wyrównaniu wierszy sąsiednie pary usunięcie+dodanie przechodzą przez drugi LCS na poziomie tokenów, dzięki czemu renderer może podświetlić tylko te słowa, które naprawdę zmieniły się w wierszu — to, co recenzenci nazywają intra-line lub word-level diff.
Dlaczego nie porównywać po prostu znak po znaku? Bo edycje rzadko są płaskie: wstawienie jednego wiersza w środek pliku ze 200 wierszami przesuwa każdy poniżej. Naiwne `===` uznałoby wszystkie 199 wierszy za różne. LCS mówi prawdę: dodany jeden wiersz, 199 bez zmian.
To narzędzie wykonuje całe porównanie w Twojej przeglądarce. Bez przesyłania, bez plików tymczasowych, bez logów. Bezpieczne dla kodu firmowego, redlinowanych umów, prywatnych logów — wszystkiego, czego nie chciałbyś wkleić na obcy serwer. Musisz porównać JSON? Użyj strukturalnego JSON Diff, by kolejność kluczy i białe znaki przestały być szumem. Porównujesz dwa configi w YAML lub CSV? Najpierw konwertuj przez YAML to JSON albo JSON to CSV, a potem diffuj odpowiednim narzędziem dla formatu.
// Two strings that look 'mostly the same' but a naïve check disagrees const a = 'hello world'; const b = 'hello, world!'; // Character equality a === b; // false — but only 3 characters actually changed. // LCS-style diff (this tool, at line + word granularity) // → 1 line modified, inline highlight: 'hello[, ]world[!]' // → unified patch: // --- original // +++ modified // @@ -1 +1 @@ // -hello world // +hello, world!
Kluczowe funkcje
Side-by-Side + Unified
Przełączaj między wizualnym widokiem dwukolumnowym (do recenzji ludzkiej) a kanonicznym formatem łatki unified-diff (do `git apply`, narzędzi code review, raportów błędów).
Podświetlanie wyrazów inline
Gdy dwa wiersze są sparowane jako zmodyfikowane, kolorowe tło noszą tylko zmienione tokeny. Wzrok natychmiast znajduje edycję zamiast skanować 80 znaków.
Ignorowanie wielkości liter / białych znaków / pustych wierszy
Cztery niezależne przełączniki: wielkość liter, wszystkie białe znaki, tylko końcowe białe znaki, puste wiersze. Replikuje `git diff -i -w -b` w kilku kliknięciach.
Eksport unified diff
Skopiuj czystą łatkę `---/+++/@@` z trzema wierszami kontekstu. Wpada bezpośrednio do komentarza PR, raportu błędu lub `patch -p1`.
100% w przeglądarce
Wejścia nigdy nie opuszczają Twojego urządzenia. Bez przesyłania, bez analityki tekstu. Działa offline po załadowaniu strony. Bezpieczne dla kodu firmowego i poufnej prozy.
Świadomość Unicode + RTL
Dzieli tokeny na granicach słów Unicode. Treści arabskie, hebrajskie, CJK porównują się czysto; warianty zakończeń wierszy (CRLF, LF, CR) są normalizowane.
Przykłady
Code review — zmiana nazwy jednej zmiennej
function getUser(id) {
const u = db.users.find(x => x.id === id);
return u;
} function getUser(userId) {
const u = db.users.find(x => x.id === userId);
return u;
} Widok obok siebie podświetla każdy wiersz zawierający zmianę nazwy, a inline word diff przyciemnia niezmienione tokeny — recenzent od razu widzi, który identyfikator został zmieniony.
Edycja umowy — dodana jedna klauzula
1. The service is provided as-is. 2. Either party may terminate with 30 days notice. 3. Disputes are resolved in California courts.
1. The service is provided as-is. 2. Either party may terminate with 30 days notice. 2a. Termination notice must be in writing. 3. Disputes are resolved in California courts.
Jedyną różnicą jest wstawiona klauzula (wiersz 2a). Otaczający kontekst pozostaje czysty — przydatne przy redlining umów lub dokumentów polityki.
Analiza logów — zmieniony czas żądania
GET /api/users 200 14ms POST /api/orders 201 88ms GET /api/orders/42 200 21ms
GET /api/users 200 14ms POST /api/orders 201 4200ms GET /api/orders/42 500 21ms
Dwa wiersze ulegają zmianie. Podświetlenie inline pokazuje dryf opóźnień 88ms → 4200ms i kod statusu 200 → 500. Standardowe podejście dla osi czasu incydentu.
Białe znaki na końcu — przełącz „Ignoruj końcowe”
margin: 0; padding: 0; border: none;
margin: 0; padding: 0; border: none;
Bez tej opcji wiersz 1 zgłasza różnicę (spacje na końcu). Włącz „Ignoruj spacje / taby na końcu wiersza”, a diff spadnie do zera — ten sam trik co `git diff -b`.
Jak korzystać
- 1
Wklej obie wersje
Tekst oryginalny po lewej, zmieniony po prawej. Live diff renderuje się podczas pisania; duże wejścia (>200 KB łącznie) przełączają się na ręczny przycisk Diff.
- 2
Włącz potrzebne opcje ignorowania
Ignoruj wielkość liter, wszystkie białe znaki, spacje końcowe lub puste wiersze — każda niezależna, pamiętana między wizytami.
- 3
Przeczytaj diff lub zabierz łatkę
Side-by-Side do recenzji ludzkiej, Unified do formatu łatki `---/+++/@@`. „Kopiuj unified diff” wysyła czystą łatkę do schowka na potrzeby code review lub `patch -p1`.
Typowe pułapki diff
Cały plik „zmieniony” po kopii Windows-vs-Unix
Jeśli wklejasz z Notatnika na Windows do oryginału edytowanego pod Uniksem, każdy wiersz pokaże różnice \r. Włącz „Ignoruj spacje / taby na końcu wiersza”, by wyciszyć znaki CR.
Diff: 200 modifications (all because of trailing \r)
Ignore trailing spaces / tabs → 2 real changes
Diff krzyczy z powodu wcięć
Przeformatowanie tabów ↔ spacji rozsadza diffy wierszowe. „Ignoruj wszystkie białe znaki” zwija diff do prawdziwych zmian semantycznych.
Diff: 87 modifications (all are indent changes)
Ignore all whitespace → 4 actual changes
Identyczne akapity oznaczone z powodu jednego pustego wiersza
Dodanie lub usunięcie jednej pustej linii w prozie może rozjechać cały region. „Ignoruj puste wiersze” to naprawia, nie tykając treści.
Diff: paragraph 2 'completely changed' (one blank line moved)
Ignore blank lines → no changes in paragraph 2
Diff mówi „identyczne”, ale pliki są różne
Niemal zawsze to opcja ignorowania wielkości liter lub białych znaków pozostawiona z poprzedniej sesji. Otwórz panel opcji ignorowania — wszystkie przełączniki tam są. Wyłącz wszystkie, jeśli chcesz porównania bajt po bajcie.
0 differences shown, but `cmp` says the files differ
Disable all Ignore options → real diff appears
Wklejony JSON wygląda jak „wszystko się zmieniło”
Text diff traktuje kolejność kluczy jako istotną; JSON — nie. Dla payloadów JSON używaj dedykowanego narzędzia JSON Diff — ignoruje kolejność kluczy i respektuje ścisłość typów.
Text diff on JSON: 100% of lines changed (just a key reorder)
<a href="/pl/tools/json-diff">JSON Diff</a>: 0 differences
Ostrzeżenie o obcięciu diffu zignorowane
Powyżej 5 000 wierszy na stronę wejście jest obcinane. Jeśli pojawi się ostrzeżenie, przełącz się na `diff -u file1 file2` lub `git diff --no-index` z wiersza poleceń — oba strumieniują i obsługują gigabajty.
Pasted a 20,000-line log — only first 5,000 lines diffed
`diff -u a.log b.log` in terminal handles full file
Typowe zastosowania
- Snippet do code review
- Wrzuć dwie wersje funkcji do pól, by zobaczyć zmianę nazwy, usuniętą gałąź lub nową klauzulę guard jednym spojrzeniem. Podświetlanie słów inline jest szybsze niż skanowanie diffu GitHub w poszukiwaniu jednoliniowej zmiany.
- Redline umowy / polityki
- Wklej wczorajszą umowę i dzisiejszą wersję. Wstawione klauzule wyskakują; niezmienione akapity przygasają do szarości. Eksportuj unified patch jako ślad recenzji prawnej.
- Analiza osi czasu logów
- Porównaj wycinek logów SRE sprzed incydentu z wycinkiem z trakcie incydentu. Dryf opóźnień, kodów statusu i częstotliwości wypływa natychmiast, bez `awk`.
- Korekta prozy / wersji roboczej
- Wklej wersję roboczą i wersję redaktora. Inline word diff pokazuje dokładnie, które zdania zostały przeredagowane — nieocenione przy akceptowaniu lub odrzucaniu zmian pojedynczo.
- Recenzja tłumaczenia
- Diffuj stare tłumaczenie z nowym, by potwierdzić, że nowa wersja zachowuje sens, strukturę i placeholdery. Włącz „Ignoruj spacje końcowe”, by wyciszyć szum, który tłumacze często wprowadzają.
- Audyt plików konfiguracyjnych / .env
- Porównaj dwa pliki `.env`, `docker-compose.yaml` lub shell rc. Z włączoną opcją „Ignoruj puste wiersze” diff skupia się na różnicach funkcjonalnych zamiast na szumie formatowania.
Szczegóły techniczne
- LCS z obcinaniem prefiksu/sufiksu
- Wspólne wiodące i końcowe wiersze są obcinane przed uruchomieniem programowania dynamicznego LCS. Diff „dwa configi po 2 000 wierszy z jednym zmienionym wierszem” zwija się do tabeli DP 1×1 i renderuje się w czasie krótszym niż milisekunda.
- Diff intra-line na poziomie tokenów
- Sąsiednie bloki usunięcia + dodania są parowane i tokenizowane po ciągach Unicode słów / nie-słów / białych znaków. Drugi przebieg LCS produkuje zielone/czerwone zakresy tokenów, które czynią zmodyfikowane wiersze czytelnymi.
- Unified diff = zgodny z git/patch
- Wyjście jest zgodne z formatem `---/+++/@@ -L,C +L,C @@` zdefiniowanym dla GNU patch i używanym przez Git, GitHub i każde narzędzie code review. Aplikuj przez `pbpaste | patch -p0`.
- Limit wejścia 5 000 wierszy na stronę
- Powyżej limitu diff jest obcinany i ostrzega. Dla wejść wielomegabajtowych użyj `diff -u` lub `git diff --no-index` z wiersza poleceń — strumieniują i obsługują gigabajty.
Najlepsze praktyki
- Wybierz opcje ignorowania przed czytaniem
- Szum od spacji końcowych, CRLF i wielkości liter zagłusza sygnał. Najpierw włącz odpowiednie opcje; diff czyta się znacznie łatwiej, a Ty nie uczysz się prześlizgiwać obok „fałszywych” zmian.
- Unified do udostępniania, Side-by-Side do recenzji
- Kolumny wizualne są dla Twoich oczu. Łatki unified są dla cudzych terminali. Skopiowany unified diff wpada bez tłumaczenia do wiadomości Slack, komentarza Jira lub `patch -p1`.
- Sprawdzenie zdrowego rozsądku przez procent podobieństwa
- Jeśli dwa pliki są „prawie takie same”, ale wynik podobieństwa to 30%, masz problem z zakończeniami wierszy lub białymi znakami. Włącz „Ignoruj wszystkie białe znaki” i sprawdź ponownie przed czytaniem diffu.
Często zadawane pytania
Czy wklejany tekst jest wysyłany na Wasz serwer?
Jaka jest różnica między text diff a JSON diff?
Jak ignorować białe znaki, wielkość liter lub puste wiersze?
Czym jest unified diff (i kiedy go kopiować)?
Dlaczego diff pokazuje całe wiersze jako zmienione, gdy edytowałem tylko jedno słowo?
Jak obsługiwane są zakończenia wiersza CRLF i LF?
Jak duże mogą być oba wejścia?
A co z diffowaniem kodu? Czy zna mój język?
Dlaczego pojedyncza edycja czasem wygląda jak usunięty wiersz plus dodany wiersz?
Jak obliczany jest procent podobieństwa?
Czy mogę udostępnić diff koledze?
Czy diff obsługuje języki pisane od prawej do lewej, jak arabski lub hebrajski?
Powiązane narzędzia
Zobacz wszystkie narzędzia →Darmowy Regex Tester — dopasuj i debuguj wzorce online
Przetwarzanie tekstu
Testuj wzorce regex natychmiast względem dowolnego tekstu. Podświetlanie dopasowań na żywo, grupy przechwytujące, podgląd zamiany, podział oraz wyjaśniacz wzorca. Regex w wariancie JavaScript, w 100% prywatnie, bez rejestracji.
Darmowy licznik słów i znaków online
Przetwarzanie tekstu
Licz słowa, znaki, zdania, akapity i czas czytania na bieżąco. Licznik na żywo z kontrolą limitów Twittera, meta description i Instagrama. Za darmo, prywatnie, bez rejestracji.
Konwerter systemów liczbowych — binary, hex, decimal i octal
Narzędzia konwersji
Konwertuj między systemami binarnym, szesnastkowym, dziesiętnym i ósemkowym (2–36) w czasie rzeczywistym. Bezpłatnie i prywatnie — w przeglądarce.
Koder i dekoder Base64
Kodowanie i formatowanie
Zakoduj i zdekoduj Base64 online za darmo. Konwersja w czasie rzeczywistym z pełną obsługą UTF-8 i emoji. 100% w przeglądarce, bez rejestracji.
Generator crontab i kreator wyrażeń cron
Data i czas
Buduj, waliduj i dekoduj wyrażenia cron w przeglądarce. Podgląd kolejnych uruchomień w czasie lokalnym lub UTC. Składnia POSIX 5-polowa, presety, opis po polsku. Za darmo, prywatnie, bez rejestracji.
Konwerter CSV na JSON
Kodowanie i formatowanie
Konwertuj CSV na JSON w przeglądarce. RFC 4180, wnioskowanie typów, nagłówek, big-int safe. 100% prywatnie, bez wysyłki.