LINUX.ORG.RU

Подскажите утилиту для сравнения строк буква-в-букву

 


0

1

diff сравнивает строки, не показывая различия между ними, а мне надо чтобы показал, какие новые буквы появились и какие были заменены

★★★★★

Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от LimpTeaM

vimdiff на строках только подсвечивает от первого и до последнего изменения. Если несколько слов в разных местах строки изменено, то и непонятно.

unDEFER ★★★★★
()
Ответ на: комментарий от dmitry237

Ну почти. Длинные строки неудобно смотреть, из-за отсутствия автопереноса. Но в целом делает то, что нужно

next_time ★★★★★
() автор топика
Ответ на: комментарий от next_time

Дело не в python. Там просто сделано для использования в репозитории. А без репозитория кажется так должно работать:

$ diff -u 1.txt 2.txt | ydiff
unDEFER ★★★★★
()
Ответ на: комментарий от dmitry237

mcdiff

вообще жир - даже не знал о таком хотя более 10-и лет mc пользуюсь и если надо было что то сравнить в mc сравнивал, но просто два файла рядом открывал - фактически то же самое, только без подсветки… век живи - век учись, за наводку - спасибо, обязательно впредь только так буду пользоваться.

amd_amd ★★★★★
()
Ответ на: комментарий от unDEFER

Да, так сработало. Но подсветило только слова, а не буквы. mсdiff лучше отработал.

next_time ★★★★★
() автор топика

Прям по буквам я не знаю, а по словам родной брат diff’а для этой цели - wdiff

LamerOk ★★★★★
()

diffuse 1.txt 2.txt 3.txt

пысы. У меня он вообще по f2 в меню mc вызывается и показывает различие внутри выделенных файлов.

justAmoment ★★★★★
()
Последнее исправление: justAmoment (всего исправлений: 1)

Есть wdiff, который показывает разницу в словах

vel ★★★★★
()

dwdiff, но пишут он словами, не буквами - A diff program that operates at the word level instead of the line level

sergej ★★★★★
()

Команда diff в Unix-подобных системах предназначена для сравнения файлов построчно, а не посимвольно. Если вам нужно увидеть различия между строками на уровне символов (например, какие буквы были добавлены или заменены), вам потребуется использовать другие инструменты или подходы.

Вот несколько способов, как можно достичь этого:

1. Использование wdiff

wdiff — это утилита, которая показывает различия между файлами на уровне слов или символов. Она выделяет добавленные, удаленные и измененные части текста.

wdiff file1.txt file2.txt

Пример вывода:

This is [-old-] {+new+} text.

2. Использование git diff --word-diff

Если вы работаете с Git, можно использовать встроенную функцию –word-diff, которая покажет различия на уровне слов или символов.

git diff --word-diff=color --no-index file1.txt file2.txt

Пример вывода:

This is {+new+} text.

3. Использование diff с --color и --side-by-side

Если вы хотите использовать diff, но с более наглядным выводом, можно включить подсветку и сравнение в две колонки:

diff --color=always -y file1.txt file2.txt

Пример вывода:

This is old text.      |  This is new text.

4. Использование cmp и xxd

Если вам нужно сравнить файлы побайтово, можно использовать cmp вместе с xxd:

cmp -l file1.txt file2.txt | xxd

Это покажет различия в байтах, но не в символах.

5. Использование Python или другого скриптового языка

Если вам нужно более гибкое решение, можно написать скрипт на Python, который покажет различия на уровне символов:

from difflib import ndiff

def compare_files(file1, file2):
    with open(file1, 'r') as f1, open(file2, 'r') as f2:
        diff = ndiff(f1.readlines(), f2.readlines())
        print(''.join(diff))

compare_files('file1.txt', 'file2.txt')

Пример вывода:

  This is old text.
+ This is new text.

6. Использование vimdiff

Если вы работаете в терминале, можно использовать vimdiff, который покажет различия между файлами в интерактивном режиме:

vimdiff file1.txt file2.txt

Этот инструмент выделит изменения на уровне символов.

Заключение

Если вам нужно сравнить строки на уровне символов, wdiff, git diff --word-diff или скрипт на Python будут наиболее подходящими инструментами. Выберите тот, который лучше всего соответствует вашим потребностям.

Lrrr ★★★★★
()
Ответ на: комментарий от Lrrr

И ты конечно же проверял все эти советы нейросеточки? Или скопипастил не глядя? Зачем?

anonymous
()
Ответ на: комментарий от Lrrr

Ты бы прежде чем тащить сюда этот вечер, почитал бы сначала тред. Твой пост бесполезен чуть более, чем полностью, мудрила.

anonymous
()
Ответ на: комментарий от anonymous

бесполезны чуть более чем полностью скоро станут луддиты, которые не пользуются нейронками «потому что потому» и бегут задавать вопросы на ЛОР, тратя свое и чужое время.

Lrrr ★★★★★
()
Ответ на: комментарий от dataman

–word-diff-regex=.

Вот это реально круто. Именно так регулярные выражения и нужно использовать. Можно диффы по предложениям или параграфам строить.

Зачем? Сложно сказать. Ну, например, чтобы получить полный контекст вокруг одного расхождения.

kaldeon ★★
()
Последнее исправление: kaldeon (всего исправлений: 1)
Ответ на: комментарий от next_time

Согласен, но жить можно. Настраиваешь в текстовом редакторе/терминале быстрый переход к N-ому символу от текущего и норм.

kaldeon ★★
()
Ответ на: комментарий от amd_amd

1) Ctrl-X Ctrl-D
2) Но есть нюанс - подсвеченные красным лишние пробелы и табуляции остаются салатовыми.
заодно SpaceRanger

ABW ★★★★★
()
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария