答案1
像这样的东西awk
可以完成这项工作:
diff -y --suppress-common-lines backup.txt newfile.txt|awk -F'[>,]' '{gsub(/ /,"")} {print $2} '
答案2
你可以diff
通过以下方式告诉你:
diff --old-line-format= \
--unchanged-line-format= \
--new-line-format=%L backup.txt newfile.txt
要对输出进行后处理diff -y
,您可以执行以下操作:
diff -y --suppress-common-lines backup.txt newfile.txt |
LC_ALL=C sed -n $'s/^[[:blank:]]*>\t//p'
但这并不是万无一失的,如果backup.txt
可能包含像这样的行[blanks]>[TAB][anything]
。
$'...'
是 ksh93 中的一种特殊类型的引用(现在其他一些 shell 也支持),其中\t
扩展为 TAB 字符。的 GNU 实现不需要它sed
,其中\t
已经匹配 TAB (尽管不是内括号表达式)。
在C
区域设置中,[[:blank:]]
匹配空格或制表符。
通过管道将它们传送到
tr -d \`\',
从输出中删除`
,'
和字符。,
并:
sed 's/[[:space:]]\{1,\}/ : /g'
将每一行上的一个或多个空白字符序列替换为" : "
.
或者将两者合并为一个sed
命令:
sed 's/[`,'\'']//g; s/[[:space:]]\{1,\}/ : /g'
sed
或者与后处理并排输出的命令结合使用:
sed $'s/^[ \t]*>\t/!d
s///p
s/[`,'\'']//g
s/[[:space:]]\{1,\}/ : /g'