SED - 无法在UTF-8编码的字符上执行某些命令

时间:2011-04-18 22:15:40

标签: macos unicode utf-8 sed

我有一个看起来像这样的文件:

<text top="123" left="45" width="50" height="17" font="8">Måndag</text>

如本主题所述,此文件以utf-8编码。使用此命令时:

cat file | sed 's_.*top="\([0-9][0-9]*\)" left="\([0-9][0-9]*\)".*>\(.*\)<.*_\1 \2 \3_'

它永远不会完成执行并且不打印任何内容。

然而执行这样一行:

cat file | sed 's/å/FOO/'

给了我正确的输出:

<text top="123" left="45" width="50" height="17" font="8">MFOOndag</text>

这是sed中的错误还是我的正则表达式或我使用它的方式有问题?我想要的是一种简洁的方法来提取顶部,左侧和内容数据而不涉及太多命令。

3 个答案:

答案 0 :(得分:2)

最可靠的方法是使用perl代替sed:

bash$ perl -CSAD -pe 's/foo/bar/g'

这将允许你的参数,std流和你处理的所有文件中的Unicode。

答案 1 :(得分:1)

并非所有的seds都是为了处理UTF-8而构建的。我会查看源代码,看看是否已应用任何相关补丁。 FTR,Red Hat派生的seds 正确处理UTF-8。

答案 2 :(得分:0)

尝试this建议。看起来它可能适合你。