我要给一些古籍文本行加上包裹标签,如 p、h2 之类,是用 sed 做的;调试使用中发现,当行中包含 4 字节的生僻字时,.*这个匹配会失败,从而导致加包裹标签失败。
下面的测试是希望把问题说清楚,实际下面的 sed 命令是一个较大的脚本中一个长管道中的一环。测试文本中的 4 字节生僻字是“𢢼”。
请不吝赐教!
注释:赋值测试字符串给变量 a
qhel@qhel-vagrant MSYS /d/Documents/project/coding/guji
$ a="公乃密遣解𢢼、高祚等乘險夜襲"
注释:查看字符串长度
qhel@qhel-vagrant MSYS /d/Documents/project/coding/guji
$ echo ${#a}
15
注释:替换失败
qhel@qhel-vagrant MSYS /d/Documents/project/coding/guji
$ echo $a | sed "s/^[^#=;%:|-].*$/<p>&<\/p>/g";
公乃密遣解𢢼、高祚等乘險夜襲
=====
注释:去掉生僻字重新赋值给 b
qhel@qhel-vagrant MSYS /d/Documents/project/coding/guji
$ b="公乃密遣解、高祚等乘險夜襲"
qhel@qhel-vagrant MSYS /d/Documents/project/coding/guji
$ echo ${#b}
13
注释:替换成功
qhel@qhel-vagrant MSYS /d/Documents/project/coding/guji
$ echo $b | sed "s/^[^#=;%:|-].*$/<p>&<\/p>/g";
<p>公乃密遣解、高祚等乘險夜襲</p>