LINUX.ORG.RU
ФорумAdmin

sed удалить все кроме русских слов и пробелов между ними

 ,


0

1

Пытаюсь в большом текстовом фаиле оставить только русские слова с пробелами, чтобы потом с помощью sort -u получить только уникальные слова. Но почему то остается куча мусора.

пробовал вот так

sed -i -e 's/[^а-яА-ЯёЁ\ ]\+//g;s/\ \{2,\}/\ /g' file.txt

В выхлопе остаются русские слова и мусор наподобие:

«»…—”•

С седом никогда не имел дело, поэтому сначала все удалял по 1 символу, затем уже понял что можно удалить [:punct:] и т.д. а потом подсказали решение сверху, но почему то все равно не все удаляет

Подскажите пожалуйста - как можно побороть?

p.s. выхлоп после приведенной команды + в нем прошелся:

nice -10 sed -i 's/^ *//g' 123.txt пробел в начале строки
nice -10 sed -i '/./!d' 123.txt Удаляет все пустые строки из файла

Обязательно sed-ом? Питоном можно в три строчки посимвольно читать текст, проверять вхождение символа в список разрешённых символов. Что-то вроде:
allowed_symbols=['а','б','в','г','д']
for s in text[]:
if s in allowed_symbols:
print s,

MrClon ★★★★★ ()
Ответ на: комментарий от MrClon

Не не обязательно, лучше конечно средствами баша чтобы заодно поучится. Питоном к сожалению не владею, попробую поставить и попробовать

censured ()

sed не умеет в диапазоны кириллицы. Баш умеет.

$ echo абвг | sed 's/г/---/'
абв---
$ echo абвг | sed 's/а-я/---/'
абвг
$ a="абвг"; echo ${a//[а-я]/u}
uuuu
Так что shopt -s extglob и вперёд.

Deleted ()

Ура получилось!! Оказывается фаил был в другой кодировке, спасла отличная команда:

nice -10 iconv -f WINDOWS-1251 -t UTF-8 1234.txt > 777.txt

Остался последний вопрос раз этот уже решен. После «зачистки» ушли все символы, остались только слова на русском, но имеется и какая то часть одиноко стоящих букв:

н б н у у б у б у й
н н у
у у
у б у б
б у
н су б у н у с й у Ўй й
н й й у н у н у н н н с н н у
н у

Не подскажите шаблон для их удаления? Если буква 1 и окружена пробелом, то ее удалить,а остальные оставить. хотя есть догадка что тамбудет нечто подобное с 2мя и 3мя буквами.

censured ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.