[已解决] sed 中正则表达式的问题
本帖最后由 MJ_B 于 2021-1-18 09:28 编辑答案在3楼和6楼,感谢各位大大回复!
随便创建一个文件ttt.txt(编码为UTF-8),内容为:
什么的 asndkdpfbmdfklg
啪啪啪 fghfghfgfffffff
哦哦哦 abc
中间空白的为制表符.
然后使用sed替换
sed -r 's/[\u4e00-\u9fa5]+/123/' ttt.txt
结果为:
什么的123sndkdpfbmdfklg
啪啪啪123ghfghfgfffffff
哦哦哦123bc
sed -r 's/[^\u4e00-\u9fa5]+/123/' ttt.txt
结果为:
123asndkdpfbmdfklg
123fghfghfgfffffff
123abc
^是不匹配的意思,在[]中。
请问下前辈大佬们为什么要加^才能替换掉中文??
本帖最后由 fanvalen 于 2021-1-17 21:18 编辑
^作用是从什么地方开始,还有$是结尾。
马的好像解释错了
算了我不懂sed 我是从正则角度理解的
这个和系统字符集有关系吧 locale,而且你通配符里是unicode码 本帖最后由 MJ_B 于 2021-1-17 22:02 编辑
Eaglecad 发表于 2021-1-17 21:19
这个和系统字符集有关系吧 locale,而且你通配符里是unicode码
是的我这里[]因为你写了\u所以是按编码查表,这个没问题。如果我说错了,还请麻烦指出。
我用在线正则去试,是没有问题的。 [^]
匹配指定范围外的任意单个字符 本帖最后由 癄慂 于 2021-1-18 20:55 编辑
sed -r$'s/[\u4e00-\u9fa5]+//' ttt.txt
输出
asndkdpfbmdfklg
fghfghfgfffffff
abc
应该是这样吧
癄慂 发表于 2021-1-17 22:07
sed -r$'s/[%u4e00-%u9fa5]+/123/' ttt.txt
输出
asndkdpfbmdfklg
是的,这个可以 中文被替换成123了 .
请问s前面加个$是什么意思?写法吗? MJ_B 发表于 2021-1-17 22:21
是的,这个可以 中文被替换成123了 .
请问s前面加个$是什么意思?写法吗?
https://stackoverflow.com/questions/14889005/hex-codes-in-sed-not-behaving-as-expected-on-osx/14889910#14889910
不知道给不给贴这个链接emm{:1_896:}
癄慂 发表于 2021-1-18 20:57
https://stackoverflow.com/questions/14889005/hex-codes-in-sed-not-behaving-as-expected-on-osx/1488 ...
感谢,我知道了。
页:
[1]