如何使用sed在每组CJK字符([\ o200- \ o377])之前添加换行符?

时间:2013-11-17 01:23:41

标签: bash sed cjk

我有一份包含中英文本混合的文件,例如:

This is some text.你好。This is some more text.

我只需要在中文文本的每一部分之前放置换行符,或[\o200-\o377]。 E.g:

This is some text.
你好。This is some more text.

我尝试了这个,但它将每个汉字放在一个独特的行上:

LC_ALL="POSIX" sed 's/[\o200-\o377]/\n&/g'

如何在使用sed的每个CJK字符之前添加换行符?

1 个答案:

答案 0 :(得分:3)

您实际上是用换行符替换了此类字符的每个实例以及匹配的内容。您似乎想要替换至少一个此类字符的每个序列,并使用换行符后跟匹配的内容。

s/[\o200-\o377]\+/\n&/g

(注意:sed可能需要大约posix regex-mine声明“应该支持POSIX.2 BRE,但它们并不完全是因为性能问题。”因此,\+是正确的。使用“扩展”(sed -r),只需+,因此s/[\o200-\o377]+/\n&/g就是正确的。)