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'
Рассказывать
Рассказываю
Рассказав
好吧,也许 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'
Рассказывать
Рассказываю
Рассказав