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

6597
C. Ross

Как я могу получить команду unix diff, показывающую только добавленные и удаленные строки? Если diff не может этого сделать, какой инструмент может?

2
Мы говорим о команде unix diff? Johan 15 лет назад 1

3 ответа на вопрос

6
Craig

Делай diff -u0что хочешь?

Различия в aix не распознают -u0 (к сожалению). C. Ross 15 лет назад 0
Вы * можете * установить GNU diff. dmckee 15 лет назад 2
3
Dave Webb

Я не уверен, что это возможно, так как будет сложно различить измененные, добавленные и удаленные строки.

Рассмотрим этот файл:

start old old old end 

Мы редактируем это так, чтобы это выглядело так:

start old old but now new new new end 

Если мы diffэто сделаем, мы получим этот вывод:

< old < old --- > old but now new > new > new 

Это просто генерировать. Но если вы попросите diffнапечатать только добавленную и удаленную строку, я думаю, что становится вопросом мнения, какие строки были добавлены и удалены, а какие изменены. Например, я удалил последнюю строку, которая сказала, oldи заменил ее строкой, которая сказала, newили я отредактировал это?

(+1) Согласитесь в принципе, но должен быть способ получить то, что думает diff о добавленных и удаленных строках. Другими словами, покажите вывод `sdiff file1 file2` без строк, в которых есть записи с обеих сторон. Если вы рассматриваете все измененные строки как удаленные и добавленные строки, вы в основном получаете вывод `comm -3 file1 file2` nagul 15 лет назад 1
2
Steve

У меня такой же вопрос. Эта функция была моим решением для получения максимального номера строки изменения (т.е. изменения начинаются с буквы «+»). После чего я снова перебираю файл diff снова построчно и не отправляю процессору строки, пока это не вызовет строку для обработки:

 #==================================================================== proc_diff_file() # processes a diff file #==================================================================== # Arg_1 = Diff File Name # Arg_2 = New File Name - the one with the new lines { NEW_FILE=$1 A_FILE=$2 if [ -f "$A_FILE" ]; then echo "processing diff $A_FILE" pre_process_diff $A_FILE # Set loop separator to end of line ndx=0 BAKIFS=$IFS IFS=$(echo -en "\n\b") exec 3<&0 exec 0<$A_FILE while read line do ndx=$(expr $ndx + 1) # use $line variable to process line in processLine() function if [ $ndx > $max_ndx ]; then proc_age $line fi done exec 0<&3 # restore $IFS which was used to determine what the field separators are IFS=$BAKIFS  # cleanup $NEW_FILE  echo "processing diff $A_FILE done" fi }  

Вот функция:

 #==================================================================== pre_process_diff() # pre-processes a diff file for last changed line # sets a variable named $max_ndx #==================================================================== # Arg_1 = Diff File Name { A_FILE=$1 max_ndx= # collect last line number of diff +  # all lines following are new data `grep -n "^[+]" $A_FILE | gawk '-F:' '{ print $1 }' >tmp` # Set loop separator to end of line # read through to the last line number BAKIFS=$IFS IFS=$(echo -en "\n\b") exec 3<&0 exec 0<tmp while read last_line do max_ndx=$last_line done exec 0<&3 # restore $IFS which was used to determine what the field separators are IFS=$BAKIFS echo "pre-processing diff $A_FILE done max_ndx=$max_ndx" }  

Стив

Установите GNU diff и используйте его. Инструменты AIX сильно устарели. vonbrand 9 лет назад 0

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