突出显示行之间的差异

突出显示行之间的差异

我有一个文件,其中的行几乎相同,但有一些细微的差异,我想突出显示每行之间的差异。

例子:

  • 敏捷的棕色狐狸跳过了懒狗。
  • ACK棕色的狐狸跳跃越过那只懒狗。
  • 嘎嘎狐狸跳了出来v非常懒狗。
  • 嘎嘎狐狸跃过真的非常懒的狗。

(此处粗体文本标记与上一行相比已插入和更改的字符,斜体标记在下一行中删除的字符)。

突出显示不需要看起来与示例中完全相同,但它应该指示已添加、更改或删除了哪些字符。并且它应该仅通过突出显示来表明这一点(即不在一行中打印旧字符和新字符),以便每一行上的实际文本仍然与原始文本相同。

我尝试过构建一些东西dwdiff(迭代行然后比较连续行),但还没有找到一种方法来突出显示已删除的字符:

infile=$1
line1=
line2=
lineNo=0
while IFS="" read -r nextLine || [ -n "$nextLine" ]; do
    line1=$line2
    line2=$nextLine

    if [[ "$lineNo" -gt 0 ]]; then
        dwdiff -1 -c <(printf '%s\n' "$line1") <(printf '%s\n' "$line2")
    else
        printf '%s\n' "$line2"
    fi

    lineNo=$((lineNo+1))
done

理想情况下,差异实际上适用于字符,但单词级别的差异也可以。

有没有办法得到这个结果dwdiff?或者是否有现有的工具可以做到这一点?

相关内容