Заставьте команду `diff` искать только отличия от указанного диапазона строк

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

Я пытался с помощью:

diff "code1.js" "code2.js" --suppress-common-lines | tee outputFile

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

1 ответ

Решение
diff <(sed -n 'S1,S2p' file1) <(sed -n 'S3,S4p' file2)

где

  • S1 - начальная строка file1.
  • S2 - конец строки file1.
  • S3 - начальная строка file2.
  • S4 - это конец строки file2.

Пропуск строки 1-4:

diff <(sed -n '5,10p' file1) <(sed -n '5,10p' file2)

$ more file1
1
2
3
4
5
6
7
8
9
10

$ more file2
11
2
3
4
5
65
7
8
9
10

Результат

2c2
< 6
---
> 65

-> он пропустил различие в строке 1.

Для этого может быть проще использовать инструмент для рабочего стола. Мелд отлично (тема на AU: /questions/115849/kakie-horoshie-graficheskie-prilozheniya-dlya-razlichij-i-sliyaniya-dostupnyi-dl/115861#115861):

Meld - это инструмент визуального сравнения и слияния, предназначенный для разработчиков. Meld поможет вам сравнить файлы, каталоги и проекты с управлением версиями. Он обеспечивает двух- и трехстороннее сравнение файлов и каталогов, а также поддерживает многие популярные системы контроля версий.

Другие вопросы по тегам