LINUX.ORG.RU

sed, который «я так вижу»

 ,


5

2

Решился я, наконец, выложить свой вариант sed-а, который меня устраивает. В отличии от оригинального, он работает с буфером целиком, а не построчно. Имеет дополнительный и целый стек буферов, а также счётчик, что позволяет несложно обрабатывать вложенный развесистый синтаксис, всевозможные вложенные блоки. Умеет символ '\0', правда для этого требует отсутствия любого другого символа в тексте/паттернах/заменах. Умеет перекодировать через iconv. regex-ы, подгружаемые и имена выгружаемых файлов могут быть динамически сформированы в процессе исполнения. Пока не умеет матчить номера строк, но, думаю это и не надо. Зато буковок под команды — 46.

Полное описание

В качестве примеров приложены скрипты для очистки html-ей после офисов (open/ms) и из lib.ru/samlib.ru для приемлемого результата для ручной правки или просмотра читалками.

★★★★★

Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от Rx0

Вопрос один, почему кодировка сообщений в KOI8-R, а не UTF-8?

Мне так нравится. Но это не проблема, перекодируйте и перетранслируйте, будет в нужной кодировке ругаться.

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

upd. При загрузке веб-страницы ftp://ftp.simtreas.ru/pub/my/bsed.tgz произошла ошибка

Зачем вы сломали у себя ftp? Я не знаю чем вам помочь. Это обычный анонимный ftp.

vodz ★★★★★
() автор топика
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от vodz

перекодируйте и перетранслируйте, будет в нужной кодировке ругаться.

Для тех кто хочет в UTF-8:

iconv -f koi8-r -t utf-8 bsed.c  > bsed_utf8.c
Rx0
()
Ответ на: комментарий от Rx0

Для тех кто хочет в UTF-8:

Ну надо все .c файлы заодно и имена восстановить для make. Но самое смешное, что это можно сделать самой этой программой и без mv!

$ ./bsed -e 'V /koi8-r:utf-8/ xp' -i~ *.c

vodz ★★★★★
() автор топика
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от vodz

можно сделать самой этой программой и без mv!

Да, супер! ) Спасибо за хороший софт. )

Rx0
()
Ответ на: комментарий от gnu_linux

Нет, не нормально. У меня качается со смарта

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

Сомнительно, с сайтом-то на местячковом языке, без нормально версионированных релизов и без репозитория. Останется ещё одной форумной поделкой.

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

Останется ещё одной форумной поделкой.

Да про это все через пару дней забудут, и слава богу. Ещё не хватало куда-то там пропихиваться, поддерживать, версионность вам подавай, на местячковые фобии глаза закрывать, что нету и пр. Не надо - проходите мимо, сделано в первую очередь для себя и даже на мининовость не зарился.

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

А зря.

Авторы — люди капризные, показал — и то хорошо. Если кто будет юзать и покажет как — будет приятно. Но поддержка, сопровождение — это отдельная, неблагодарная работа, нифига не прикалывающая авторов. А во-вторых, я вполне осознаю, что получился ещё один изврат, которым можно только пользоваться, когда сам этим много лет наблатыкался, остальным это будет не нужно, ибо неудобно. Вот для примера свой же скрипт, который я написал потому так быстро, что это был перевод из отладочного скрипта на bsed в bash. Он на мой же взгляд более понятный и делает тоже самое :)

vodz ★★★★★
() автор топика
Последнее исправление: vodz (всего исправлений: 2)
Ответ на: комментарий от vodz

Авторы — люди капризные, показал — и то хорошо.

Так я не говорю «дверь мне запили!» «делай, сцуко!», я просто выразил своё отношение к твоей позиции. Софтина выглядит нестандартно, но вкусно.

Кстати, как оно себя поведёт на ОЧЕНЬ больших файлах? Оно умеет жрать из stdin/pipe?

получился ещё один изврат

Изврат — это городить костыли-обёртки.

скрипт

Из спортивного интереса попробуй изобрести то же самое на POSIX Shell (без расширений). ☺

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

Кстати, как оно себя поведёт на ОЧЕНЬ больших файлах? Оно умеет жрать из stdin/pipe?

Пока хватает памяти, оно будет работать. stdin/pipe оно умеет также как и sed, об этом сказано в самом начале по поводу формата вызова, где [files...]* означает не обязательно и по поводу опции -i.

Из спортивного интереса попробуй изобрести то же самое на POSIX Shell (без расширений).

Обычный sh не умеет сам regex-ы и потому такое пожелание не очень. Я уже тут публиковал решение, искать лень, как в таких случаях делают: ищут свободный символ, grep-ом в цикле, потом меняют \n на него и далее уже sed/awk одной программой, а не построчно обрабатывают вложенные блоки, причём awk даже удобнее, так как он не только Тьюринг-полный как sed, но ещё и удобный — умеет считать (что надо для поиска всяких открыто-закрытых «скобочек»).

vodz ★★★★★
() автор топика
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от vodz

Пока хватает памяти, оно будет работать. stdin/pipe оно умеет также как и sed, об этом сказано в самом начале по поводу формата вызова, где [files…]* означает не обязательно и по поводу опции -i.

Торт!

Обычный sh не умеет сам regex-ы и потому такое пожелание не очень. Я уже тут публиковал решение, искать лень, как в таких случаях делают: ищут свободный символ, grep-ом в цикле, потом меняют \n на него и далее уже sed/awk одной программой, а не построчно обрабатывают вложенные блоки, причём awk даже удобнее, так как он не только Тьюринг-полный как sed, но ещё и удобный — умеет считать (что надо для поиска всяких открыто-закрытых «скобочек»).

Излишне исчерпывающе. ☺

Представляешь, насколько усложнится код на sh (с использованием grep/sed/awk) в сравнении с тем же функционалом на bash (почти без использования внешних утилит)?

Проще жевать текст на чистом awk/sed или Perl (но не на Python!), чем городить sh-обёртки.

А bash — это переусложнённый комбайн, который вроде бы и фичаст, но некоторые вещи в нём делаются через такую задницу, что лучше взять что-нибудь другое.

mord0d ★★★★★
()

работает с буфером целиком, а не построчно.

Так это ж не плюс. Это ж минусище.

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

Так это ж не плюс. Это ж минусище.

Какой вы умный, это что-то... Это и было изначальным ТЗ, так как в жизни гигабайты целого текста в одном файле почти не встречается, зато открывающий тег на одной строке, а закрывающий - вообще в конце файла.

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

в жизни гигабайты целого текста в одном файле почти не встречается

А этого и не надо. Речь не за файлы, речь за потоки. Та же самая фигня, что с iconv. Натрави iconv на mplayer и посмотри результат:

mplayer you.mp3 2>&1 | iconv -c -t UTF8

И то же самое проделай со стандартным sed-ом и своим.

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

И то же самое проделай со стандартным sed-ом

Для тега в начале и конце получится ровно тоже самое: вы будете добавлять в буфер новую строку до конца, медленно и печально с большим расходом памяти и ещё трахаться с этим брейнфаковым синтаксисом.

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

Ты проделай сначала, а потом трепи.

Ну то есть по делу сказать нечего, так и запишем, слились.

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

ровно тоже самое

Ах да, забыл. На треке ты разницы не увидишь. Нужен радиопоток. Выбери сам на своё усмотрение радиостанцию.

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

Сам ты слился,

Дяденька, в отличии от некоторых, я умею sed, и не только много лет его юзаю, но и сам их несколько написал, пока не родилась окнончательно эта идея (и уже лет как 20 ей). Ещё раз, если вам поток не только вывести, а обработать что-то внутри между «скобочками», то другого метода, как накапливать в буфер, с фрагментацией памяти там нет. Отдыхайте.

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

накапливать в буфер

Отдыхайте.

Сам отдохни. Твой sed ничего не отдаст, пока не закончится поток. А в радио поток не заканчивается, пока не прервёшь плеер.

anonymous
()

Сайт на html версии 2, исходник на ftp, текст в KOI-8, скрипт правки html после MSOffice. Эх, где мои 17-лет (20-30, на самом деле), где мои 90-е? А так – не ракетная наука, конечно, но интересно, применения должны найтись. А зеркала переконветированной в utf-8 программы на гитхабе думаю долго ждать себя не заставят, вероятно кто-то и дорабатывать и поддерживать в конце-концов возьмётся, как только в ходе работы какие-то новые хотелки/наработки появятся.

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

Твой sed ничего не отдаст, пока не закончится поток.

Он отдаст после того, как в конце этого потока и будет закрывающий тег и потом EOF по условию этой задачи. Для задачи прочитать не более XX байт эта программа не предназначена, так как само условие XX оно, во-первых, выглядит убого, а во-вторых, если очень надо легко реализуется внешним средством.

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

А зачем вы с ним спорите. Вы заявляли где-то, что написали полную замену sed’а, предлагали выкинуть оригинальную утилиту из состава основных дистрибутивов linux и bsd?

Нет, вы написали простую но достаточно мощную утилиту, под названием bsed для пакетного редактирование относительно небольших текстовыз файлов с входным языкомЮ близким к sed. Но, тем не менее «это животные разной породы».

be_nt_all ★★
()
Последнее исправление: be_nt_all (всего исправлений: 1)
Ответ на: комментарий от vodz

легко реализуется внешним средством.

Костылять предлагаешь. «Хороший» ты «разработчик».

anonymous
()
Ответ на: комментарий от be_nt_all

Сайт на html версии 2,

О да, как же без перделок для статической документации теперь жить то можно...

исходник на ftp

Что, смузи поперёк горла встало? Не модно?

скрипт правки html после MSOffice

Откровенный передёрг и враньё.

А зеркала переконветированной в utf-8 программы на гитхабе думаю долго ждать себя не заставят

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

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

Костылять предлагаешь. «Хороший» ты «разработчик».

Ну то есть выдирать теги sed-ом, а потом погонять через iconv, это не внешние костыли, да?

vodz ★★★★★
() автор топика
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от vodz

Да не, это не наезд был, а приступ ностальгии. Другое дело что опять же по опыту той самой ностальгии github – не самое плохое место для хранение исходников (не смотря на нынешних хозяев), а все эти разрозненные ftp не так редко вымирают.

Откровенный передёрг и враньё

Ну ок,

html_filter.bsed — Фильтр html-файлов, получаемых при сохранении из Open/Ms-офисов файлов при экпорте в html. Вычищает все стили для ручной доводки в более приемлемом виде.

после OOo/LO он тоже чистит, но чистка html именно после mso у меня вызывает вполне ностальгические воспоминания о благословенных 90-х (благословенных – потому что молодость, да и не помню я как-то особых ужасов).

be_nt_all ★★
()
Последнее исправление: be_nt_all (всего исправлений: 2)
Ответ на: комментарий от anonymous

Ещё раз, автор не предлагает замену классического sed’а. Его утилита и называется иначе, для всяких многоэтажных unix-pipe sed остаётся.

be_nt_all ★★
()
Последнее исправление: be_nt_all (всего исправлений: 2)
Ответ на: комментарий от anonymous

А что ты с этим делать будешь?:

А почему вы там написали sed, а не скажем firefox? Ведь он тоже умеет показывать тексты и даже искать в них.

vodz ★★★★★
() автор топика
Ответ на: комментарий от quantum-troll

Структурные регулярки есть?

Версия от 2008 была на PCRE, но это меня всегра расстраивало, что почему-то это обязательно внешняя библиотека и принципиально не хотят добавить в libc -шный gnu-regex хотя бы нежадные regex-ы. Теоретически, когда у нас есть язык программирования, то особой проблемы сделать всё на regex, типа десяток килобайт для парсенья email выглядит неразумно, и я пока остановился на gnu-regex с демонстрацией в примерах и документации, за счёт чего можно побороть проблему.

vodz ★★★★★
() автор топика
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от anonymous

Поттеринг

Ну вы сравнили. sed – одно из средств пакетного редактирования в среде unix-shell. Есть и другие. То же awk, как минимум. Если добавить к sed, awk, m4 и т. д. и т. п. ещё и bsed – ничего не изменится. Только то, что с bsed можно будет решать какие-то задачи, требовавшие ранее awk и довольно банальных программ для него.

Что тут общего с процессом инициализации системы?

be_nt_all ★★
()

А можно для новичков в линуксах привести пару реальных примеров, коогда нужен это sed, bsed, etc.

anonymous
()
Ответ на: комментарий от be_nt_all

sed – одно из средств

Ну да. Их много, чего жалеть то. Давайте угробим парочку.

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

пару реальных примеров, коогда нужен это sed

Классика от одного из первых писателей про заек юниксы на Руси.

https://www.linuxcenter.ru/lib/books/posixbook/ch12int.phtml

Где-то у того же Федорчука были примеры ну совсем из его реальной работы над книгами.

Ну а вообще – задача простая, есть у тебя массив текстов на html, tex, каком-то языке программрования. Нужно внести некую однотипную правку во все тексты. И да, bsed, судя по всему вот именно на такого рода задачах вполне реально может подвинуть классический sed.

be_nt_all ★★
()
Последнее исправление: be_nt_all (всего исправлений: 2)
Ответ на: комментарий от anonymous

Типа не понял, о чём я?

Да как вашу чуть понять, если она чушь? b у меня - блочный, sed - только похожий синтаксис, а не замена его. Всё написано чёрным по белому. Купите гуся и морочьте ему голову, я то причём?

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

b у меня - блочный, sed - только похожий синтаксис, а не замена его

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

be_nt_all ★★
()
Последнее исправление: be_nt_all (всего исправлений: 1)
Ответ на: комментарий от vodz

b у меня - блочный

Всё, всё. Осади. Я лишь хотел убедиться, что ты не станешь топить и устраивать sed vs bsed.

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