2016-06-12 19 views
0

关于这里的第一个问题 - 我已经搜索了一些答案,但到目前为止已经空了。从文件中删除带有日语字符的行

我有一个多行文本文件,我正在清理。其中一部分是删除包含日文字符的行。我一直在使用sed进行其他操作,但在这种情况下它不起作用。

我的印象是,使用-r开关和\p{Han}正则表达式可以工作(从查看这种类型的其他问题),但它在这种情况下不起作用。

这里是我的测试字符串 - 运行这将返回完整的字符串,并不会像我期待的那样过滤出JP字符。

echo 80岁返老还童的处女: 第3话 | sed -r "s/\\p\{Han\}//g" 

我错过了什么吗?我应该使用另一个命令吗?

+0

你知道,你在你的文件中其他人物除了日语和ACSII字符? – syadav

+0

是的。该文件是从亚马逊刮来的书名清单,所以在那里有一点大杂烩。 – Elliotpage

回答

0

我认为这可能为你工作:

echo "80岁返老还童的处女: 第3话" | tr -cd '[:print:]\n' 

的sed不支持Unicode类AFAIK,并且也支持多字节范围。

-d删除SET1中的字符,-c反转它。
[:print:]匹配包括空格在内的所有可打印字符。
\n是换行符

以上不仅会删除日文字符,还会删除所有多字节字符,包括控制字符。

Perl中也可以使用:

PERLIO=:utf8 perl -pe 's/\p{Han}//g' file 

PERLIO=:utf8告诉Perl踏输入和输出UTF-8

+0

这非常非常接近,谢谢!如何调整perl命令以删除包含JP字符的整行,而不仅仅是这些字符本身? 像'sed“/ thing/d”' – Elliotpage

+0

'perl -ne'print unless// p {Han} /''。注意我将'-p'改为'-n' – andlrc

+0

这可以工作,但我的工作流程出现了更深层的问题,因为我的输入中带有'格式错误的UTF-8字符(致命)'的perl脚本扼流圈。我打算把这个标记为正确的(就像现在这样),并且会解决这些潜在的问题。 – Elliotpage