关于这里的第一个问题 - 我已经四处寻找答案,但到目前为止已经空了。
我有一个我正在清理的多行文本文件。部分原因是删除包含日文字符的行。我一直在使用sed
进行其他操作,但在这种情况下它不起作用。
我的印象是使用-r
开关和\p{Han}
正则表达式会起作用(从查看此类其他问题),但在这种情况下它不起作用。
这是我的测试字符串 - 运行它会返回完整的字符串,并且不会像我期望的那样过滤掉JP字符。
echo 80岁返老还童的处女: 第3话 | sed -r "s/\\p\{Han\}//g"
我错过了什么吗?我应该使用另一个命令吗?
答案 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