正则表达式 – 使用sed,正则表达式如何匹配汉字?
我决定发布一个问题,花了很长时间后仍然没有弄清楚问题.还阅读了一堆看似相关的帖子,没有一个真的适合我的简单(?)问题.
所以我有一个可能很大的文本文件(> 1000行),其中包含普通话中文字符,其示例行如下: "ref#2-5-1.jpg#2#一些 <variable> 内容#pic##" (the Chinese just means "some content"). 所有需要修改的是,如果没有一个空格,则应在每个角色之间插入一个空格: "ref#2-5-1.jpg#2#一 些 <variable> 内 容#pic##". 我开始天真地用以下简单的东西,但根本没有匹配: sed -e 's/([u4E00-u9fff])/1 /g' <test_utf_sed.txt > test_out.txt 其中4E00-9fff应该是普通话的代码范围. sed -e 's/([一-?])/hello/g' <test_utf_sed.txt > test_out.txt 这失败了,因为我的bash无法显示(?)“一”字符. 然后我做了一些基本测试,但也失败了: sed -e 's/(u4E00)/hello/g' <test_utf_sed.txt > test_out.txt //一 sed -e 's/(u4E9B)/hello/g' <test_utf_sed.txt > test_out.txt //些 与utf编码的另一种表示法相同(在stackoverflow上找到): sed -e 's/(u'U+4E00)/hello/g' <test_utf_sed.txt > test_out.txt 1)作为处理双字节字符的工具,是否是正确的选择? 2)是否能够处理unicode,还是需要特殊的开关? 3)我不是在寻找像这样的解决方案: step1: insert space after each character //like 's/(.)/1 /g') step2: remove space after each chacter which is not a Chinese character //like 's/([a-zA-Z0-9]) /1/g') 我知道如何做到这一点,但它不优雅,容易出错.这必须可以在sed中使用正则表达式中的utf-8. 4)我的环境是MacOS 10.6.8(oldish OS)上的bash-3.2. 5)如果您知道某些开放的regEx-onliners作为处理中文文本或语言处理的库的指针,那么分享会很棒. 非常感谢您,非常感谢您的帮助! 解决方法
Perl对处理Unicode有很好的支持.对于你的任务而言,这可能比sed更好.这个单行程就像你的第一个sed示例:
perl -CIOED -p -e 's/p{Block=CJK_Unified_Ideographs}/$& /g' filename -CIOED告诉perl在utf8中执行其I / O. -p为输入文件的每一行运行给定代码一次,然后打印结果. -e指定要运行的一行Perl代码.有关更多信息,请参阅命令行参数上的the documentation. 正则表达式使用named ranges来标识要匹配的字符. 您可能还想阅读Perl Unicode文档. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |