使用sed替换变音符号

时间:2013-01-23 11:13:20

标签: shell sed special-characters

我尝试了以下内容:

sed -e 's/ü/\\"u/g' filename.tex>filename2.tex

但我的终端无法识别变音符号,所以用“你”取代所有你。我知道tex有包和什么可以解决这个问题,但我现在对sed方式感兴趣。

3 个答案:

答案 0 :(得分:4)

根本问题在于sed,您的区域设置,终端,shell以及您正在操作的文件之间存在复杂的交互。以下是要尝试的事项列表。

  • 如果您很幸运,您的shell sed以及您正在处理的文件已完全同意您要替换的字符应表示为。在你的情况下,你已经尝试过,但它失败了。

    sed 's/ü/\\"u/g' filename.tex
    
  • 如果你只是稍微不那么幸运,其他部分都很好,只是你的sed不够现代,无法理解你想要替换的角色序列。像你这样的简单sed脚本可以简单地传递给perl,这通常是更新的字符编码。

    perl -pe 's/ü/\\"u/g' filename.tex
    

    如果字符编码是UTF-8,您可能需要将-CSD选项传递给Perl,和/或用某种类型的转义表示您要替换的字符。您可以说\xfc表示原始十六进制代码(拉丁语-1和拉丁语9中恰好是ü)或Unicode字符\x{00fc},甚至是\N{LATIN SMALL LETTER U WITH DIAERESIS} ;但请注意,Unicode对此字形有几种表示形式(预先组合或分解,标准化或不标准化)。另请参阅http://perldoc.perl.org/perlunicode.html

    (对于就地编辑,也许您也想添加-i选项。)

  • 最后,您可能需要分解并简单地找出要替换的字符代码的原始字节。有问题的文件的几行十六进制转储应该是有帮助的。之后,Perl应该能够应对,但你需要弄清楚如何禁用字符集编码和解码等。例如,如果您发现有问题的序列是0xFF 0x03,那么perl -pe 's/\xff\x03/\\"u/g' filename.tex应该工作

答案 1 :(得分:1)

如果有人需要反过来:

sed -i 's/\\"u/ü/g;s/\\"a/ä/g;s/\\"o/ö/g;s/\\"U/Ü/g;s/\\"A/Ä/g;s/\\"O/Ö/g;s/{\\ss}/ß/g' *.tex

答案 2 :(得分:0)

尝试

sed -i 's/\([\ä\ö\ü\Ä\Ü\Ö]\)/\&\1uml\;/g;y/\ä\ö\ü\Ä\Ö\Ü/aouAOU/;s/\ß/\&szlig\;/g' ${FILE}