我有一个非常大的纯文本文件与各种语言,如英语,日语,中文…我想知道包含中文字符的行数。
我认为使用grep和wc -l可以做到这一点,但是我如何才能真正做到这一点呢?
cat filename | grep -P "[\x{4e00}-\x{9fcc}]" | wc -l此命令不起作用,并显示以下错误消息:
.grep:\x{...}序列中的字符值太大。
发布于 2013-03-25 06:40:33
如果您不介意使用Python,您可以在unicodedata模块的帮助下观察文件中使用了哪些字符。使用nāgarī输入和Python 3的示例:
>>> import unicodedata
>>> word = "ब्र॑ह्मन्"
>>> len(word)
9
>>> for char in word:
... unicodedata.name(char)
...
'DEVANAGARI LETTER BA'
'DEVANAGARI SIGN VIRAMA'
'DEVANAGARI LETTER RA'
'DEVANAGARI STRESS SIGN UDATTA'
'DEVANAGARI LETTER HA'
'DEVANAGARI SIGN VIRAMA'
'DEVANAGARI LETTER MA'
'DEVANAGARI LETTER NA'
'DEVANAGARI SIGN VIRAMA'当然,您首先需要查找每个脚本中使用的字形的unicode名称。unicode字符表可以在here中找到。在同一网站上给出了每种语言的一些特定表格。
一旦你定义了你想要捕获的字符范围,剩下的事情就很简单了:
all_chars = ['ब', '्', 'र', '॑', 'ह', '्','म', 'न', '्']
i = 0
with open('thefile') as f:
for line in f.readline():
i += 1
for char in all_chars:
if char in line:
print("char %s found in line %s" % (char, i))
continue发布于 2020-01-14 06:09:01
我有一个非常大的纯文本文件,有各种语言,如英语,日语,中文…我想知道包含中文字符的行数。
我认为使用grep和wc -l可以做到这一点,但是我如何才能真正做到这一点呢?
cat文件名| grep -P "\x{4e00}-\x{9fcc}“| wc -l
此命令不起作用。
Grep本身不支持Unicode字符范围。只需使用grep变体,例如完全支持Unicode和UTF-8/16/32编码输入的ugrep:
cat filename | ugrep "[\x{4e00}-\x{9fcc}]" | wc -lhttps://stackoverflow.com/questions/15600945
复制相似问题