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

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

Я попытался использовать:

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

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

5
задан 19 May 2019 в 21:07

1 ответ

diff <(sed -n 'S1,S2p' file1) <(sed -n 'S3,S4p' file2)

где

  • S1 - начальная строка файла1.
  • S2 - это файл конца строки 1.
  • S3 - это начальная строка файла 2.
  • S4 - это файл конца строки 2.

Пропуск строки 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: https://askubuntu.com/a/2947/15811 ):

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

0
ответ дан 19 May 2019 в 21:07

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

Похожие вопросы: