SED - 无法对 UTF-8 编码字符执行某些命令
我得到一个如下所示的文件:
<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 中的错误还是我的正则表达式或我使用它的方式有问题?我想要的是一种简洁的方法来提取顶部、左侧和内容数据,而不涉及太多命令。
I got a file that looks like this:
<text top="123" left="45" width="50" height="17" font="8">Måndag</text>
As noted in the topic, this file is encoded in utf-8. When using this command:
cat file | sed 's_.*top="\([0-9][0-9]*\)" left="\([0-9][0-9]*\)".*>\(.*\)<.*_\1 \2 \3_'
it never completes the execution and prints nothing.
However executing a line like this one:
cat file | sed 's/å/FOO/'
gives me a correct output:
<text top="123" left="45" width="50" height="17" font="8">MFOOndag</text>
Is this a bug in sed or is there something wrong with my regex or the way that I'm using it? What I want is a neat way to extract the top, left and content data without involving too many commands.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
可靠地做到这一点的最简单方法就是使用 perl 代替 sed:
这将允许在您的参数、std 流和您处理的所有文件中使用 Unicode。
The easiest way to do this reliably is just to use perl in place of sed:
That will allow Unicode in your arguments, your std streams, and all files you process.
并非所有 sed 都是为处理 UTF-8 而构建的。我会查看源代码以查看是否已应用任何相关补丁。 FTR、Red Hat 派生的 sed确实 可以正确处理 UTF-8。
Not all seds are built to handle UTF-8. I would look at the source to see if any relevant patches have been applied. FTR, Red Hat-derived seds do handle UTF-8 properly.
尝试这个建议。看起来它对你有用。
Try this suggestion. Looks like it could work for you.