Делай diff -u0
что хочешь?
Как я могу получить diff, чтобы показать только добавленные и удаленные строки
Как я могу получить команду unix diff, показывающую только добавленные и удаленные строки? Если diff не может этого сделать, какой инструмент может?
3 ответа на вопрос
Я не уверен, что это возможно, так как будет сложно различить измененные, добавленные и удаленные строки.
Рассмотрим этот файл:
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
или я отредактировал это?
У меня такой же вопрос. Эта функция была моим решением для получения максимального номера строки изменения (т.е. изменения начинаются с буквы «+»). После чего я снова перебираю файл 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" }
Стив
Похожие вопросы
-
9
В чем разница между командами "su -s" и "sudo -s"?
-
2
.profile в Mac OS X?
-
1
Приостановить все, кроме x задач, интенсивно использующих процессор
-
-
9
"Отсоединить" и "Reattach" Xterms через X сессий?
-
6
Какие функции Zsh вы используете?
-
1
Windows дата репрезентация
-
5
Прозрачная командная строка в Vista?
-
9
grep все файлы .java в каталоге для конкретной строки
-
4
Используйте портфель Windows из командной строки
-
1
Является ли kill -STOP временной командой?