如何查找和更换分离?

时间:2012-08-17 00:23:43

标签: sed replace nawk

我有一个包含一些分音标记的文件̈。我需要用\textdiaeresis替换它们,以便在TeX中使用。

似乎与其他符号一起使用的常用命令总是导致输出为\\textdiaeresis\ extdiaeresis,后者将\t解释为“tab”。

我尝试过这些sed命令:

sed -i 's/\ ̈/\textdiaeresis /g' ./file.txt
sed -i 's/\ ̈/\\textdiaeresis /g' ./file.txt
sed -i 's/\ ̈/\\\textdiaeresis /g' ./file.txt
sed -i "s/\ ̈/\textdiaeresis /g" ./file.txt
sed -i "s/\ ̈/\\textdiaeresis /g" ./file.txt
sed -i "s/\ ̈/\\\textdiaeresis /g" ./file.txt

我尝试过这些nawk命令:

nawk '{sub(/ ̈/,"\textdiaeresis"); print}' file.txt > file.txt2
cp file.txt2 file.txt
nawk '{sub(/ ̈/,"\\textdiaeresis"); print}' file.txt > file.txt2
cp file.txt2 file.txt
nawk '{sub(/ ̈/,"\\\textdiaeresis"); print}' file.txt > file.txt2
cp file.txt2 file.txt

如何使用此TeX代码替换分音符?

1 个答案:

答案 0 :(得分:1)

在Mac OS X 10.7.4上bash(版本3.2.48)下,我发现sed没有问题(Mac OS X sed,而不是GNU sed)。

$ x="s, ̈. "
$ echo "$x" | ~/src/sbcs2utf8/utf8-unicode
(standard input):
0x73 = U+0073
0x2C = U+002C
0x20 = U+0020
0xCC 0x88 = U+0308
0x2E = U+002E
0x20 = U+0020
0x0A = U+000A
$ echo "$x" | sed 's/ ̈/\\textdiaresis/'
s,\textdiaresis. 
$

该角色为U + 0308组合DIAERESIS;我从问题中复制了分配给x的片段。 Unicode标准规定了(第2章,§2.11):

  

在Unicode标准中,所有组合字符将按顺序使用   它们适用的基本字符。 Unicode字符U + 0061“a”的序列   拉丁文小写字母A,U + 0308“¨”结合分音符,U + 0075“u”拉丁语小写字母U明确表示“äu”而非“aü”。

因此,问题文本中的分音应该在空间上呈现。使用Firefox(14.0.1),在shell输出中,分音符显示在跟随它的.之上,这是错误的。在sed命令中,分音符似乎与下面的斜杠结合,这也是错误的。那好吧!但通过sed翻译对我来说是正确的。