从文件中删除包含日文字符的行

时间:2016-06-12 15:56:18

标签: linux sed

关于这里的第一个问题 - 我已经四处寻找答案,但到目前为止已经空了。

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

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

这是我的测试字符串 - 运行它会返回完整的字符串,并且不会像我期望的那样过滤掉JP字符。

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

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

1 个答案:

答案 0 :(得分: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