Answers:
只需使用以下语法:
sed 's/馑//g' file1
或以转义形式:
sed "s/$(echo -ne '\u9991')//g" file1
(请注意,较早版本的Bash和某些Shell无法理解echo -e '\u9991'
,因此请首先检查。)
sed
具有g修饰符,因此它们在彼此跟随时也替换了所有出现的情况。sed也应将其视为一个字符,请参见:echo -ne "馑" | wc -m
给1
。如果计算字节数(wc -c
),它将返回3
。我是否正确理解您的问题?
.
指“一个字符”还是“一个字节”?
echo 馑 | sed s/...//
给了我馑
(什么都替换不了)
en_US.UTF-8
,但不能在下运行C
。
Perl可以做到:
echo 汉典“馑”字的基本解释 | perl -CS -pe 's/\N{U+9991}/Jin/g'
-CS
为标准输入,输出和错误打开UTF-8。
sed
支持Unicode的多个版本:
我找不到有关BSD sed的信息,我认为这很奇怪,但我认为它也支持Unicode的可能性很大。不幸的是,没有标准的方法可以告诉您sed
要使用哪种编码,因此每个编码都有自己的方式。
这对我有用:
$ vim -nEs +'%s/\%u9991//g' +wq file1
这比我想要的更冗长。这是完整的解释:
-n
禁用vim交换文件-E
改进模式-s
静音模式+'%s/\%u9991//g'
执行替代命令+wq
保存并退出file1
就地修改的,对吗?
echo 馑 | sed s/...//
打印什么吗?