我正在寻找一种方法来突出2个字符串之间的差异。这个想法是在终端中显示iconv改变了哪些字符。已经处理了这两个字符串以删除前导和尾随空格,但必须处理内部空格。
RED="$(tput setaf 1)" ## Short variables for the tput ->
CYA="$(tput setaf 6)" ## -> commands to make output strings ->
CLS="$(tput sgr0)" ## -> easier to read
str1="[String nâmè™]" # String prior to iconv
str2="[String name[tm]]" # String after iconv -f utf-8 -t ascii//translit
最终我想自动化差异的格式化,以便它们被我可以回显到终端的输出颜色代码包围。
${str1}
=突出显示红色,两个字符串不共有的字符
${str2}
=以青色突出显示,两个字符串不共有的字符
通缉输出:
output1="[String n${RED}â${CLS}m${RED}è™${CLS}]"
output2="[String n${CYA}a${CLS}m${CYA}e[tm]${CLS}]"
我看到的大多数diff工具都是在行或字级别上工作的。我正在考虑解析第一个diff的字节#的cmp输出,但是我必须重新解析它看起来的多个差异。
无论如何,我想一想,它似乎是一个涉及的过程,所以我只是想确保我没有错过一个明显的解决方案或工具。
现在,我认为最简单的方法是格式化每个字符串,将一个字节放在一个新行上,然后打开我的选项。
nstr1="$(fold -w1 <<< "$(echo "${str1}")")"
nstr2="$(fold -w1 <<< "$(echo "${str2}")")"
diff <(echo -e "${nstr1}") <(echo -e "${nstr2}")
这是我得到的,除非我走在正确的轨道上,否则我不想走得更远。我确定有很多方法可以做到这一点但是有更有效的方式去这里吗?
答案 0 :(得分:1)
@Thomas Dickey在评论中提供的答案表明,没有任何工具或流程比我尝试它的方式容易得多。
为了完成,我能够产生&#34; 通缉输出&#34;使用以下diff
行足够简单。
diff --changed-group-format="\${RED}%=\${CLS}" <(echo -e "${nstr1}") <(echo -e "${nstr2}")|tr -d '\n'
diff --changed-group-format="\${CYA}%>\${CLS}" <(echo -e "${nstr1}") <(echo -e "${nstr2}")|tr -d '\n'
不幸的是,我还没有想出如何回应输出以解释颜色代码,但这是另一个问题。