2016-06-12 6 views
0

Первый вопрос здесь - я искал вокруг, чтобы собрать ответ на этот вопрос, но до сих пор дошел до пустого.Удалить строки с японскими символами из файла

У меня есть многострочный текстовый файл, который я очищаю. Частью этого является удаление строк, содержащих японские символы. Я использовал sed для других операций, но в этом случае он не работает.

У меня создалось впечатление, что использование переключателя -r и регулярного выражения \p{Han} будет работать (от просмотра других подобных вопросов), но в этом случае он не работает.

Вот моя тестовая строка - запуск этого возвращает полную строку и не отфильтровывает символы JP, как я ожидал.

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

Я что-то не хватает? Есть ли другая команда, которую я должен использовать вместо этого?

+0

вы знаете, у вас есть другие символы в файле, кроме японского и ACSII символов? – syadav

+0

Да. Файл представляет собой список названий книг, очищенных от Amazon, так что там есть небольшая мешанина. – Elliotpage

ответ

0

Я думаю, что это может работать для вас:

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

СЭД не поддерживает классы Юникода 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 if/\ p {Han}/''. Заметьте, что я изменил '-p' на' -n' – andlrc

+0

Это работает, но у меня возникают более серьезные проблемы с моим рабочим процессом, поскольку скрипт perl зажимает мой ввод с помощью символа «Malformed UTF-8 (фатальный)». Я собираюсь отметить это как правильно (как есть) и исправит эти основные проблемы. – Elliotpage

Смежные вопросы