Удаление строк из текстового файла по маске

Автор Тема: Удаление строк из текстового файла по маске  (Прочитано 1014 раз)

Оффлайн vold57Автор темы

  • Бизнес оценка: (6, 100%)
  • Мастер
  • *****
  • СПАСИБО: 5299
  • Сообщений: 7336
  • Карма: 289
  • Пол: Мужской
  • Награды Более трех тысяч спасибо Мастер поисковой оптимизации
    • SEO, интернет-маркетинг, сайостроение

Оффлайн vold57Автор темы

  • Мастер
  • *****
В каждой строке текстового файла есть такой фрагмент - небольшое_слово/х.х.х.х. Вместо х могут быть разные цифры, иногда две. х.х.х.х. это версия программы. Нужно будет удалять устаревшие версии. Как это можно сделать?


Оффлайн Marishel

  • Бизнес оценка: (0)
  • Ветеран
  • *****
  • СПАСИБО: 312
  • Сообщений: 906
  • Карма: 19
  • Пол: Женский
    • грузоперевозки

Оффлайн Marishel

  • Ветеран
  • *****
в блокноте замена символов
взять х и заменить
в поле на что заменить ничего не писть
фактически удалит
просто в несколько этапов все заменится

Оффлайн vold57Автор темы

  • Бизнес оценка: (6, 100%)
  • Мастер
  • *****
  • СПАСИБО: 5299
  • Сообщений: 7336
  • Карма: 289
  • Пол: Мужской
  • Награды Более трех тысяч спасибо Мастер поисковой оптимизации
    • SEO, интернет-маркетинг, сайостроение

Оффлайн vold57Автор темы

  • Мастер
  • *****
Marishel, мне нужно удалять строчки целиком, в которых найдены некоторые фрагменты.

Оффлайн Marishel

  • Бизнес оценка: (0)
  • Ветеран
  • *****
  • СПАСИБО: 312
  • Сообщений: 906
  • Карма: 19
  • Пол: Женский
    • грузоперевозки

Оффлайн Marishel

  • Ветеран
  • *****
допустим строки
мне нужно удалять строчки целиком, в которых найдены некоторые фрагменты.
мне нужно удалять обчки целиком, в которых найдены некоторые фрагменты.
мне нужно удалять строчки целиком, в которых пройдены некоторые фрагменты.

начать замену с
мне нужно удалять

потом
целиком, в которых

ну и так до тех пор, пока все не удалится

Оффлайн Val_Ery

  • Бизнес оценка: (0)
  • Постоялец
  • ***
  • СПАСИБО: 89
  • Сообщений: 164
  • Карма: 17

Оффлайн Val_Ery

  • Постоялец
  • ***
мне нужно удалять строчки целиком

Самый простой вариант, как мне кажется, это использовать sed (stream editor - скажем так, это текстовый редактор в командной строке). Штука никсовая, но есть порт под Винду: устанавливается, прописывается в path (по-моему, сам) и запускается из командной строки.

Другой вариант... Если винда 10, то можно в ней поднять подсистему Линукс с нормальным полнофункциональным терминалом, в котором все это доступно "из коробки".
Или, как я помню, у вас есть vds, то можно выполнить  прямо там...

Теперь удаление строки, содержащей (обощим) цифры
Код:
Только зарегистрированные пользователи могут видеть код. Пожалуйста, войдите или зарегистрируйтесь. -i - означает "править на лету", то есть если я указал example.txt, то этот файл будет перезаписан. Поэтому, аккуратней, лучше работать с копией
 d - указание на то, что строка, в которой будут найдены цифры (digit), должна быть удалена

Работает вот так
« Последнее редактирование: 10-06-2020, 22:24:28 от Val_Ery »


Оффлайн vold57Автор темы

  • Бизнес оценка: (6, 100%)
  • Мастер
  • *****
  • СПАСИБО: 5299
  • Сообщений: 7336
  • Карма: 289
  • Пол: Мужской
  • Награды Более трех тысяч спасибо Мастер поисковой оптимизации
    • SEO, интернет-маркетинг, сайостроение

Оффлайн vold57Автор темы

  • Мастер
  • *****
Есть VDS и есть сервер с Windows Server 2019.
Сейчас попробую на VDS.  Где мне это нужно набрать - sed -i '/[[:digit:]]/d' example.txt ?

Оффлайн Val_Ery

  • Бизнес оценка: (0)
  • Постоялец
  • ***
  • СПАСИБО: 89
  • Сообщений: 164
  • Карма: 17

Оффлайн Val_Ery

  • Постоялец
  • ***
На vds лучше подключиться по ssh. Например, при помощи программы Putty или Kitty.
Там Вам откроется ... командная срока. По умолчанию открывается ваш, как пользователя, домашний каталог.
Если нужный файл лежит прямо в этом каталоге, то просто вводите код, заменив example на название вашего файла. Всё!

Если файл нужно переместить на сервер - перемещаете любым удобным способом: с помощью ftp-клиента или scp (есть winscp с гуями, ну то есть с gui).
Передвижение по файловой системе - команда cd (типа, чейндж директори). Должно работать автодополнение: то есть, не нужно вводить названия полностью, достаточно первых двух-трех символов и таб (как в винде).
Подняться в родительский каталог - cd ../
Перейти в свой домашний каталог (аналог в винде - папка пользователя в Users) - cd ~/
Копирование файлов - cp
Перемещение файла - mv название куда_положить/название

Виндовый сервер 2019 не видел, у меня установлен 2016, но сборка 16_какая-то. Там подсистему Линукс не подтянуть. В 2019 должно быть реализовано. Нужно найти в настройках сервера пункт с примерным названием "компоненты Windows" и установить крыжик напротив подсистемы Линукс. Еще год назад после этого можно было установить Убунту терминал. В нем sed есть точно. Сейчас, если не ошибаюсь, они предлагают на выбор несколько эмуляций линей. Про это описаний много, так что не потеряетесь....

И относительно первого варианта. Там не надо ходить на vds. Или Вин сервер. Просто найти в сети sed for Windows (он первый или второй в выхлопе), скачать и установить. Тогда sed будет работать прямо из виндовой командной строки.
Если не ошибаюсь, там проблема была только в какой-то старой библиотеке (msv_чего-то.dll). Но это давно было, решалось установкой redistributed package, по-моему.

Попробуйте, если не получится, попробуем решить :)
« Последнее редактирование: 10-06-2020, 23:08:26 от Val_Ery »

Оффлайн vold57Автор темы

  • Бизнес оценка: (6, 100%)
  • Мастер
  • *****
  • СПАСИБО: 5299
  • Сообщений: 7336
  • Карма: 289
  • Пол: Мужской
  • Награды Более трех тысяч спасибо Мастер поисковой оптимизации
    • SEO, интернет-маркетинг, сайостроение

Оффлайн vold57Автор темы

  • Мастер
  • *****
Пока не получается - http://prntscr.com/sxgv7q
Вообще, конечно странно, что для таких простых и как мне кажется распространенных задач нет удобных программ для винды.

Оффлайн Val_Ery

  • Бизнес оценка: (0)
  • Постоялец
  • ***
  • СПАСИБО: 89
  • Сообщений: 164
  • Карма: 17

Оффлайн Val_Ery

  • Постоялец
  • ***
Вообще, конечно странно, что для таких простых и как мне кажется распространенных задач нет удобных программ для винды.
Вполне возможно, оно и есть. Только мы об этом ни сном, ни духом :) Я вообще пользователь исключительно Линукс, 10 лет как. Винда - просто рабочая необходимость.

А по ошибке - моя вина, не упомянул... Извиняюсь ;)
Смысл вот в чем: то, что делается в кавычках - это по сути процедура замены одного на другое. То есть, если я хочу заменить букву А на Б, то, что в кавычках должно быть что-то типа
Код:
Только зарегистрированные пользователи могут видеть код. Пожалуйста, войдите или зарегистрируйтесь.При этом вместо букв могут быть цифры, целые паттерны, регулярные выражения...
Комбинашка в двойных скобках есть указание на конкретно цифры. Если бы надо было удалить строки, содержащие буквы, в коде надо заменить digit на letter.

В вашем случае надо так
Код:
Только зарегистрированные пользователи могут видеть код. Пожалуйста, войдите или зарегистрируйтесь.

Добавлено: 11-06-2020, 00:11:13

Да, ещё... Про софт под винду. Я думаю, любой редактор с поддержкой поиска/замены с использованием регулярок способен на подобное.

Мне просто в терминале удобнее :)

Добавлено: 11-06-2020, 00:29:51

Теперь, надеюсь, последнее добавление. Просто на ваш снриншот посмотрел...

digit, прописанный, как в примере, удаляет строки, в которых есть любая цифра. Если вы хотите удалить только строки, содержащие 19, то число надо прописывать так [19].

Если вы желаете удалить все версии, исключая 37 (последняя, её надо оставить), то меняете digit на не-37: то есть так [37]!

Если надо оставить две последние версии, то указываете их явно через запятую.
« Последнее редактирование: 11-06-2020, 00:29:51 от Val_Ery »


Оффлайн vold57Автор темы

  • Бизнес оценка: (6, 100%)
  • Мастер
  • *****
  • СПАСИБО: 5299
  • Сообщений: 7336
  • Карма: 289
  • Пол: Мужской
  • Награды Более трех тысяч спасибо Мастер поисковой оптимизации
    • SEO, интернет-маркетинг, сайостроение

Оффлайн vold57Автор темы

  • Мастер
  • *****
Немного помучился, но все же одолел проблему. Если в этом варианте
Цитировать
sed - i '/YaBrowser[/][[:digit:]]/d'
убрать между минусом и символом i пробел "- i ", далее убрать квадратные скобки и двоеточия и перед слешем поставить еще обратный слеш, то все будет работать.
Окончательный рабочий вариант:
Цитировать
sed -i '/YaBrowser\/19/d' fp_yabrowser.txt


 

Похожие темы

  Тема / Автор Ответов Последний ответ
5 Ответов
1916 Просмотров
Последний ответ 05-12-2010, 20:40:26
от Рэшад
0 Ответов
8690 Просмотров
Последний ответ 07-12-2010, 01:12:17
от WHorse
3 Ответов
1547 Просмотров
Последний ответ 29-11-2013, 22:11:46
от Безбашенный прораб
2 Ответов
1150 Просмотров
Последний ответ 18-06-2015, 20:03:34
от avk
2 Ответов
1397 Просмотров
Последний ответ 19-08-2015, 14:01:23
от Рупорт