perl 和 sed 中的相同正则表达式工作方式不同

Same regex in perl and sed work differently

好吧,也许 unicode 或其他有问题,但代码说明了一切:

$ cat leo
сказывать
ссказываю
сказав
BladeMight@Chandere ~ 23:24:58
$ cat leo | perl -pe 's/^с+каз/Рассказ/g'
Рассказывать
ссказываю
Рассказав
BladeMight@Chandere ~ 23:25:00
$ cat leo | sed -r 's/^с+каз/Рассказ/g'
Рассказывать
Рассказываю
Рассказав

我有文件 leo,西里尔文的内容,所以我想用 perl -pe 中的正则表达式 ^с+каз 替换错误的地方,但它只替换了只有 1 с(西里尔字母之一),例如+ 在这种情况下什么都不做(对于非西里尔文它工作正常),尽管在 sed -r 中它工作得很好。为什么会这样?

Perl 需要被告知您的源代码是 UTF-8 (-Mutf8) 并且它应该将标准输入和标准输出视为 UTF-8 (-CS)。

$ cat leo | perl -Mutf8 -CS -pe 's/^с+каз/Рассказ/g'
Рассказывать
Рассказываю
Рассказав