MJ_B 发表于 2021-1-17 19:47

[已解决] 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:11

本帖最后由 fanvalen 于 2021-1-17 21:18 编辑

^作用是从什么地方开始,还有$是结尾。

马的好像解释错了

算了我不懂sed 我是从正则角度理解的

Eaglecad 发表于 2021-1-17 21:19

这个和系统字符集有关系吧 locale,而且你通配符里是unicode码

MJ_B 发表于 2021-1-17 22:00

本帖最后由 MJ_B 于 2021-1-17 22:02 编辑

Eaglecad 发表于 2021-1-17 21:19
这个和系统字符集有关系吧 locale,而且你通配符里是unicode码
是的我这里[]因为你写了\u所以是按编码查表,这个没问题。如果我说错了,还请麻烦指出。

我用在线正则去试,是没有问题的。

yjn866y 发表于 2021-1-17 22:05

[^]

匹配指定范围外的任意单个字符

癄慂 发表于 2021-1-17 22:07

本帖最后由 癄慂 于 2021-1-18 20:55 编辑

sed -r$'s/[\u4e00-\u9fa5]+//' ttt.txt
输出
      asndkdpfbmdfklg
      fghfghfgfffffff
      abc
应该是这样吧


MJ_B 发表于 2021-1-17 22:21

癄慂 发表于 2021-1-17 22:07
sed -r$'s/[%u4e00-%u9fa5]+/123/' ttt.txt
输出
      asndkdpfbmdfklg


是的,这个可以 中文被替换成123了       .
请问s前面加个$是什么意思?写法吗?

癄慂 发表于 2021-1-18 20:57

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:}

MJ_B 发表于 2021-1-19 01:27

癄慂 发表于 2021-1-18 20:57
https://stackoverflow.com/questions/14889005/hex-codes-in-sed-not-behaving-as-expected-on-osx/1488 ...

感谢,我知道了。
页: [1]
查看完整版本: [已解决] sed 中正则表达式的问题