Приветствую. Помогите пожалуйста разобраться с ситуацией. Как удалить строки, которые содержат только цифры? Как удалить строки, в которых есть "шт" (только целые слова и "шт" сразу после символов, например 100шт, 2шт)? Как удалить строки которые начинаются с символов? Например "01234567890" или "5448вебмастер" или "348953948 вебмастер" Как просеять строки по фильтру а-я, a-z, 0-9? Оставив строки, в которых нет каких либо любых спец. символов, а только буквы и символы. Я думаю с TextPipe много кто знаком . Спасибо.
Впервые слышу. Очередной грепо-велосипед за деньги, мм? Я так понимаю, под словом "символ" вы имеете в виду цифру? Любая, на минуточку, не пустая строка начинается с символа. Более того - она вообще только из символов и состоит. Code: grep -vE "^[0-9]+$" grep -vE "[0-9]+шт" grep -vE "^[0-9]" grep -E "^[0-9a-zA-Z]+$" Почитайте что-нибудь в духе "regular expressions for complete idiots". Или просто мануал грепа. И такие вопросы отпадут сами собой.
Я так понял команда делает выборку из слов а не из предложений в строке. Тоесть такое фильтрует Такой вариант оставляет И вместе с тем фильтрует все строки в которых есть пробел \ пробелы. Как команду подогнать? Тему уже копаю, пригодится.
>> Как просеять строки по фильтру а-я, a-z, 0-9? Оставив строки, в которых нет каких либо любых спец. символов, а только буквы и символы. Именно это оно и делает, если учесть, что у вас символ == цифра.
символ - !"№;, тоесть спец. символ. Цифры и буквы должны быть . Команда работает, но немного не так. Фильтрует тоесть что мне и нужно убрать. Такой вариант оставляет И вместе с тем, пропадает и Я так понял я немного не так расписал. ps: скорей всего пробел тоже считается "спец. символом", нужно добавить его в исключения.
Пробел, не поверите, является пробельным символом, для которых даже своя группа есть, как для буквенных или числовых. Code: grep -E "^[0-9a-zA-Z\s]+$"
Спасибо. Мне вот такое подошло. Есть еще такая команда ^([^\s]+\s?){0,7}$ Под эту команду должны попадать строки в которых меньше 7 слов - так оно и есть. Но видимо команда написана не правильно, при больших объемах программа уходит в ерор. Да и сам процесс длительный, что очень странно. С ней все в порядке? p/s: видимо я порядком поднадоел
Слова в предложениях разделяются пробелами а у тебя получается \s ето любой символ. Укажи просто по колхоз-стайлу, пробел запиши как пробел)) : Под регулярку попадут строки где пробелов от 1 до 7.
Ерроры придуманы не просто так. Еррор в студию! Регулярки, конечно, штука сравнительно медленная, но что за объемы у вас такие? У меня самописный парсер sql-дампов на регулярках обрабатывает десятигиговый монолитный дамп за минуту.
Да сравнительно не большие, ~5М строк (чуть больше 200 мб). Приблизительно каждая 4 строка больше 7-ми слов. Что интересно, я применял более 10 команд (да, с такими-то знаниями ) - по процессу эта выполняется дольше всех (по обработанным мб). Обрывается где-то на 3%. В учебном прогоне все нормально, быстро, без ошибок. Вижу что там какой-то лимит, но я подозреваю что что-то не так с самой командой. Вроде не требуется все это сложить, разделить и вынести по корень Спасибо за интерес
Вы это чем вообще делаете? И еще раз - логи в студию. Это построчная обработка, то есть единственно где может оборваться - на ооочень длинной строке. И то, на машине с малым количеством ресурсов. Вы это часом не на какой-нибудь впске делаете?
Нет, не на VPS. Кстати попробовать там стоит, есть хорошая машина, по мощнее моей будет. Но там проблемы с кириллицей. Строки вмещаются в первый экран, тоесть даже скрулов горизонтальных нет. А там очень содержательный лог файл Обрабатывает 16к строк и ложится.
Вы знаете, я уже не раз это говорил, но ерроры не просто так придуманы. Написано же черным по белому. ruby -ne 'puts $. if $_.size > 64' filename Где filename - ваш лист. Покажет все строки, длина которых больше 64. Подозреваю, у вас там строка на несколько мегабайт, но для начала и так пойдет. Найдите эту противную строку.
Спасибо за совет Но в Руби я разбираюсь не больше чем в регулярных выражениях. Поставил, запустил, прописал - Даже на простейшие команды не откликается. Наверное более эпик-пользователя на этом форуме нет Есть способ для ребят из века "окон"? ------------------------------------------------------------- Строк более 200 символов (с пробелами) не найдено.
Сделайте это человеческим грепом уже, а не виндовым говноклоном. Чтобы регулярка убежала в лимит по рекурсии, строка должна быть *очень*, *очень* длинной. Или софт должен быть реализован косячно.
Мне все ровно на чем делать, главное результат Только подскажите куда жать ----------------------- Вообщем разрезал файл на куски по 500к - вроде не вылетает. Может софт загружал в ОЗУ или еще куда все строки и там их колотил... отпишусь ---------------------------- та же история