使 diff 忽略变音符号的大小写

问题描述 投票:0回答:1

我需要让

diff
忽略我输入的大小写。 两个输入都包含德语变音符号,例如 ä 和 ä。 选项
-i
成功地使
diff
忽略我输入的其他字符(如 a 和 A)的大小写,但不忽略变音符号:

$ diff -i <(echo ä) <(echo Ä)
1c1
< ä
---
> Ä

输出应该为空,因为如果忽略大小写,ä 和 ä 应被视为相同的字母。 如果我尝试这个:

$ diff -i <(echo a) <(echo A)

然后它按预期工作(无输出)。

我还尝试设置环境变量

LANG
以使
diff
使用正确的语言环境,但这似乎没有任何影响:

LANG=de_DE.UTF-8 diff -i <(echo ä) <(echo Ä)

我尝试了

LANG
的各种值。

有没有办法让

diff
忽略德语变音符号的大小写?

(我使用的是 Ubuntu 22.04 FWIW。)

shell unix encoding locale diff
1个回答
0
投票

一个简单的方法:

de-ascii()(
    sed '
        s/utf/utf_/g
        s/ä/utf{ae}/g
        s/Ä/utf{Ae}/g
    ' "$@"
)

ascii-de()(
    sed '
        s/utf{ae}/ä/g
        s/utf{Ae}/Ä/g
        s/utf_/utf/g
    ' "$@"
)

diff -i <(echo ä | de-ascii) <(echo Ä | de-ascii) | ascii-de
  • 选择一个不会出现在正常 diff 输出中的转义序列
    • utf
      可能不是一个好的选择)
  • de-ascii - 音译适当的字符
  • ascii-de - 撤消音译
  • 对输入进行编码;差异;解码
  • 假设 sed 版本可以正确处理 UTF-8
© www.soinside.com 2019 - 2024. All rights reserved.