tim9867: Убрать строки в sed
tim9867
Member
Автор темы
42/460 ответов
21 год на iXBT, с февраля 2004
Чаще пишет в "Видеозахват" (20%)
Инфо Ответить
t
tim9867 MemberАвтор темы
5 лет назад / 02 января 2020 22:08
Нарисовалась задача убрать sed-ом в файле все строки в которых символ "/" встречается меньше трех раз.

Man sed за ответ не считается
ser100
Member
142/2371 ответов
16 лет на iXBT, с сентября 2008
Чаще пишет в "Игры" (37%)
США, NYC
Инфо Ответить
ser100 Member
5 лет назад / 03 января 2020 03:32
Давай вместе писать.
Берем файл и подаем на вход седу:
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
Инфо Ответить
v
vertur Member
5 лет назад / 03 января 2020 04:04
tim9867

Man sed за ответ не считается
Хочется Вам или нет, а прочесть man sed для решения придется.
tim9867
Member
Автор темы
45/463 ответов
21 год на iXBT, с февраля 2004
Чаще пишет в "Видеозахват" (20%)
Инфо Ответить
t
tim9867 MemberАвтор темы
5 лет назад / 03 января 2020 13:59
vertur
Хочется Вам или нет, а прочесть man sed для решения придется.
Вы, это очевидно, форумный троль.
Пакостите во всех ветках.
Самое разумное при общении с вами и вам подобными - игнорировать все словоблудия идущие от вас.
Жаль, что в движке форума не предусмотрена возможность забанить топикстартером вас и вам подобных.

Добавление от 03.01.2020 13:59:

ser100
и вот он, искомый результат:
Спасибо огромное.
Все отлично сработало.
Я пытался добавлять счетчик совпадений с шаблоном ( по типу {1,2}),
но, скорее всего, неправильно экранировал символ "/". В общем ничего не получалось.
Может быть сделать из вашего скрипта более универсальный добавив счетчик.
(ну, например, символ "/" встречается не меньше 5 раз и не больше 7 раз)
Тогда такой скрипт можно будет сразу в библиотеку отборных скриптов положить.
tim9867
Member
Автор темы
56/562 ответов
21 год на iXBT, с февраля 2004
Чаще пишет в "Видеозахват" (20%)
Инфо Ответить
t
tim9867 MemberАвтор темы
5 лет назад / 17 июня 2020 17:36
Спрошу в этом топике чтобы темы не плодить.

Нужно выбрать из словаря все слова длиной 5 символов (ну с этим я наверно справлюсь с помощью grep. Хотя интересно - как это сделать с помощью sed)
А вот дальше - совсем беда
Нужно выбрать из полученного списка слов, состоящих из 5 букв, все слова где присутствует только одна гласная.
Подскажите пожалуйста - как это сделать с помощью sed.

Спасибо.
ser100
Member
162/2480 ответов
16 лет на iXBT, с сентября 2008
Чаще пишет в "Игры" (37%)
США, NYC
Инфо Ответить
ser100 Member
5 лет назад / 17 июня 2020 20:00
Ну я же тебе всё уже написал 5 месяцев назад.
Надо только лишь поменять символ "/" на список гласных и "меньше трех раз" на "меньше двух раз".
tim9867
Member
Автор темы
57/563 ответов
21 год на iXBT, с февраля 2004
Чаще пишет в "Видеозахват" (20%)
Инфо Ответить
t
tim9867 MemberАвтор темы
5 лет назад / 17 июня 2020 22:42
ser100
поменять символ "/" на список гласных


Ввожу вот такую команду

cat 5.dic | sed '/^.*а.*е.*и.*о.*у.*ы.*э.*ю.*я$/' > 5.end

Вылетает такая ошибка
sed: -e expression #1, char 40: missing command

Ну и конечно же файл 5.end получается пустой.

Исправлено: tim9867, 18.06.2020 01:38

ser100
Member
163/2481 ответов
16 лет на iXBT, с сентября 2008
Чаще пишет в "Игры" (37%)
США, NYC
Инфо Ответить
ser100 Member
5 лет назад / 18 июня 2020 01:59
[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:

tim9867
cat 5.dic | sed '/^.*а.*е.*и.*о.*у.*ы.*э.*ю.*я$/' > 5.end

Вылетает такая ошибка
sed: -e expression #1, char 40: missing command


Читать мое первое сообщение в этой теме много раз до просветления.
tim9867
Member
Автор темы
58/564 ответов
21 год на iXBT, с февраля 2004
Чаще пишет в "Видеозахват" (20%)
Инфо Ответить
t
tim9867 MemberАвтор темы
5 лет назад / 18 июня 2020 22:41
ser100
Читать мое первое сообщение в этой теме много раз до просветления.

Да хоть мозоль на глазе натри - не просветляюсь.
Для меня это остается какой-то магией

Спасибо вам огромное за скрипт. Сам бы такой не написал никогда.

Была еще у меня задача обрезать строку от первого вхождения символа (в моем случае - запятая) до конца строки.
Да, я нашел готовый скрипт, который это делает.
Вот он
1sed -r 's/,.+//'
И он работает. Все отрезал.
Но не пойму совсем - как это функционирует.
Ведь этот скрипт сильно отличается от того, что вы мне подарили.

И, кстати. Хотелось бы все же научиться писать скрипты со счетчиком Ведь если нужно найти слова с, например, четырьмя гласными - то как раздуется предложенный вами скрипт.
А вот если вставить в скрипт счетчик, то при изменении задачи (например найти слова где 3 гласные) в скрипте практически ничего не нужно будет править.
vertur
Member
657/7235 ответов, #6 в рейтинге
16 лет на iXBT, с марта 2008
Чаще пишет в "Программирование" (52%)
Гондурас, default city
Инфо Ответить
v
vertur Member
5 лет назад / 19 июня 2020 00:14
tim9867

Но не пойму совсем - как это функционирует.
RTFM. Можно начать читать с 3го раздела.
Ваш ответ:

Нет значка Нет значка Вот тут! Лампочка Восклицание Вопрос Класс! Улыбка Злость Огорчение Поговорим? Краснею Подмигивание Ругаю ОдобряюBIUdelSxsupxsuboffsp spoilerqurlimgvideo• list1. list1 codeprecenter-hr-rusQWE→ЙЦУ
файлыочистить
Ваше имя: Авторизуйтесь Предпросмотр В полную форму
вставить выделенную цитату в окно ответа
Если Вы считаете это сообщение ценным для дискуссии (не обязательно с ним соглашаться), Вы можете поблагодарить его автора, а также перечислить ему на счет некоторую сумму со своего баланса (при отзыве благодарности перечисленная сумма не будет вам возвращена).
Также вы можете оценить сообщение как неудачное.
В течение суток можно 20 раз оценить сообщения разных участников (купите Premium-аккаунт, либо оплачивайте оценки сверх лимита).
Если Вы считаете это сообщение ценным для дискуссии (не обязательно с ним соглашаться), Вы можете поблагодарить его автора, а также перечислить ему на счет некоторую сумму со своего баланса (при отзыве благодарности перечисленная сумма не будет вам возвращена).
Также вы можете оценить сообщение как неудачное.
В течение суток можно 20 раз оценить сообщения разных участников (купите Premium-аккаунт, либо оплачивайте оценки сверх лимита).
Последние обсуждения в Конференции
01:37Куплю/продам киберрубли KOMOK
01:35Задачи по математике / геометрии Наука
01:35Правильный захват с кассет vhs Видеозахват
01:35FF БЗК Никон Z5, Z6 / Z6 II, Z7 / Z7 II / Z9 и оптика к ним Фото
01:31Ресиверы Yamaha - пообщаемся? FAQ в первом посте ДК аудио
01:23Будет ли война России с Украиной? Политика
01:22От Windows к Linux Unix
01:12x86 против ARM и других RISC-процессоров Процессоры
01:12Активация Windows XP в 2024 году (И далее). Или как переставить WINDOWS, не потеряв активацию? OС и сист. ПО
01:11Nvidia GeForce RTX 5070/Ti, 5080, 5090 [Blackwell] Видеосистема
01:09Ну что, Wildberries? Общий
01:08iXBT.photo в 2025-м году планируется закрыть. Просим перенести все свои фотографии на другие ресурсы как можно раньше (ранее: мелкие советы и предложения по улучшению фотогалереи) iXBT.com
01:08Выбор SSD Накопители
01:04PC и консоли, и вновь продолжается бой Игры
00:54Как вам творчество Бориса Гребенщикова (Аквариум) Культура
00:54Привлечение нейросетей / ИИ к модерации форумов О Конфе
00:48Рожковые кофеварки и аксессуары к ним. Выбор, обсуждение, эксплуатация. Бытовая техника
00:47DAC (ЦАП) внешний: выбор и советы Стерео
00:37Прожекты. Когда хочется чего-нибудь этакого. Эл. устройства
00:35Выбор посуды для приготовления пищи (сковород, кастрюль и т.д.) Кулинария
23:59вчераНовый смартфон Samsung за 120 долларов. Представлен Samsung Galaxy A06 5G: 50 Мп, 5000 мАч, IP54 и 4 года обновлений
23:51вчераMicrosoft создала квантовый чип Majorana 1: миллион кубитов на ладони
22:46вчераРоссийские астрономы обнаружили редкую двойную звезду с магнитным белым карликом Gaia 19cwm
22:35вчераПока видеокарты GeForce отсутствуют либо дорожают, пользователи активно переходят на Radeon. Как минимум так говорит статистика для Южной Кореи
22:16вчераЕсли хочется GeForce RTX 50, но максимально дёшево. Существование RTX 5050 Laptop подтверждено
22:06вчераУчёные «просветили стену» из титана в поисках аксионов на ускорителе в Гамбурге
21:59вчераGeForce RTX 5090 оказалась в семь раз слабее RTX 4090. Nvidia убрала поддержку PhysX из свежего драйвера для видеокарт RTX 50
21:48вчера800 л.с., рама и полный привод. Опубликованы фото супермощного Tank 400
21:45вчераTesla строит первую общедоступную зарядную станцию для электрогрузовиков в Лос-Анджелесе
21:39вчераNASA завершило сборку первого двигателя RS-25 для миссии «Артемида V»