我有一个看起来像这样的文件:
<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中的错误还是我的正则表达式或我使用它的方式有问题?我想要的是一种简洁的方法来提取顶部,左侧和内容数据而不涉及太多命令。
答案 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建议。看起来它可能适合你。