Нарисовалась задача убрать sed-ом в файле все строки в которых символ "/" встречается меньше трех раз.
Man sed за ответ не считается
Man sed за ответ не считается
Главная iXBT.com Конференция Блоги Games Видео Market Prosound ПроБизнес РегистрацияВойти | |
tim9867 Member Автор темы 42/460 ответов 21 год на iXBT, с февраля 2004 Чаще пишет в "Видеозахват" (20%) | Нарисовалась задача убрать sed-ом в файле все строки в которых символ "/" встречается меньше трех раз. Man sed за ответ не считается |
ser100 Member 142/2371 ответов 16 лет на iXBT, с сентября 2008 Чаще пишет в "Игры" (37%) США, NYC | Давай вместе писать. Берем файл и подаем на вход седу: cat test_file | sed /какое-то_регулярное_выражение/какая-то_команда Теперь нужно составить regex и дать команду седу что делать. Строка, которую мы будем искать, состоит из начала, тела и конца, так и запишем: /^ а тут тело строки $/ Тело, с ним все просто. Распишем тело: может_есть_какие-то_символы_может_нет, а потом символ / и так 3 раза, а потом опять может_есть_какие-то_символы_может_нет Запишем это в виде regex'a: .*/.*/.*/.* но впрямую символ / использовать нельзя, надо его заэкранировать \/ И окончательный вариант regex'a выглядит так: /^.*\/.*\/.*\/.*$/ И если мы скормим седу такой regex cat test_file | sed '/^.*\/.*\/.*\/.*$/' Он выведет нам все строки в которых встречается минимум 3 раза символ "/" Правда сед ругнется, поскольку команду что ему делать мы не дали. Добавим седу команду: cat test_file | sed '/^.*\/.*\/.*\/.*$/d' Результат удивит - сед удалит все строки в которых встречается 3+ раза символ "/", а нам то наоборот надо. Добавим инверсию к действию и вот он, искомый результат: cat test_file | sed '/^.*\/.*\/.*\/.*$/!d' |
vertur Member 532/6864 ответов, #6 в рейтинге 16 лет на iXBT, с марта 2008 Чаще пишет в "Программирование" (52%) Гондурас, default city | tim9867 Man sed за ответ не считается |
tim9867 Member Автор темы 45/463 ответов 21 год на iXBT, с февраля 2004 Чаще пишет в "Видеозахват" (20%) | vertur Хочется Вам или нет, а прочесть man sed для решения придется. Вы, это очевидно, форумный троль. Пакостите во всех ветках. Самое разумное при общении с вами и вам подобными - игнорировать все словоблудия идущие от вас. Жаль, что в движке форума не предусмотрена возможность забанить топикстартером вас и вам подобных. Добавление от 03.01.2020 13:59: ser100и вот он, искомый результат: Спасибо огромное. Все отлично сработало. Я пытался добавлять счетчик совпадений с шаблоном ( по типу {1,2}), но, скорее всего, неправильно экранировал символ "/". В общем ничего не получалось. Может быть сделать из вашего скрипта более универсальный добавив счетчик. (ну, например, символ "/" встречается не меньше 5 раз и не больше 7 раз) Тогда такой скрипт можно будет сразу в библиотеку отборных скриптов положить. |
tim9867 Member Автор темы 56/562 ответов 21 год на iXBT, с февраля 2004 Чаще пишет в "Видеозахват" (20%) | Спрошу в этом топике чтобы темы не плодить. Нужно выбрать из словаря все слова длиной 5 символов (ну с этим я наверно А вот дальше - совсем беда Нужно выбрать из полученного списка слов, состоящих из 5 букв, все слова где присутствует только одна гласная. Подскажите пожалуйста - как это сделать с помощью sed. Спасибо. |
ser100 Member 162/2480 ответов 16 лет на iXBT, с сентября 2008 Чаще пишет в "Игры" (37%) США, NYC | Ну я же тебе всё уже написал 5 месяцев назад. Надо только лишь поменять символ "/" на список гласных и "меньше трех раз" на "меньше двух раз". |
tim9867 Member Автор темы 57/563 ответов 21 год на iXBT, с февраля 2004 Чаще пишет в "Видеозахват" (20%) |
ser100 Member 163/2481 ответов 16 лет на iXBT, с сентября 2008 Чаще пишет в "Игры" (37%) США, NYC | [list] [^list] Matches any single character in list: for example, [aeiou] matches all vowels.... ...A leading ^ reverses the meaning of list, so that it matches any single character not in list. Чтобы sed нормально работал с русским - нужны какие-либо дополнительные настройки системы (линукса)? А что бы не проверить самому? Добавление от 18.06.2020 01:55: echo "проба проб пера пер решето тттт ммммм ееее вввв ыыыы" | sed '/^[^аеоы]*$/d' | sed '/^.*[аеоы].*[аеоы].*$/d' проб пер Добавление от 18.06.2020 01:59: tim9867cat 5.dic | sed '/^.*а.*е.*и.*о.*у.*ы.*э.*ю.*я$/' > 5.end Вылетает такая ошибка sed: -e expression #1, char 40: missing command Читать мое первое сообщение в этой теме много раз до просветления. |
tim9867 Member Автор темы 58/564 ответов 21 год на iXBT, с февраля 2004 Чаще пишет в "Видеозахват" (20%) | ser100 Читать мое первое сообщение в этой теме много раз до просветления. Да хоть мозоль на глазе натри - не просветляюсь. Для меня это остается какой-то магией Спасибо вам огромное за скрипт. Сам бы такой не написал никогда. Была еще у меня задача обрезать строку от первого вхождения символа (в моем случае - запятая) до конца строки. Да, я нашел готовый скрипт, который это делает. Вот он И он работает. Все отрезал. Но не пойму совсем - как это функционирует. Ведь этот скрипт сильно отличается от того, что вы мне подарили. И, кстати. Хотелось бы все же научиться писать скрипты со счетчиком Ведь если нужно найти слова с, например, четырьмя гласными - то как раздуется предложенный вами скрипт. А вот если вставить в скрипт счетчик, то при изменении задачи (например найти слова где 3 гласные) в скрипте практически ничего не нужно будет править. |
vertur Member 657/7235 ответов, #6 в рейтинге 16 лет на iXBT, с марта 2008 Чаще пишет в "Программирование" (52%) Гондурас, default city |
2002 | Винт или ХР? Или обое? Накопители |
2002 | X-COM 2, где ж там собака порылась, никак не пройду Игры |
2002 | Nero CD Speed: Read error at 00:00:00,что за бородень? Оптич. носители |
2002 | Когда Canon S900 в продаже? Периферия (архив) |
2002 | Позор новостному направлению iXBT.com |
2003 | WinXP - куда делись юзеры? OС и сист. ПО |
2003 | Что посоветуете для численного моделирования? Процессоры |
2003 | ASUS TXP4 и Pentium 233MMX, проблемы Сист. платы |
2005 | Проблема при сохранении AVI-шки в VirtualDubMod-е Видеозахват |
2005 | Как определить какой USB поддерживает комп - 1.1 или 2.0? Тех. поддержка |