нужен sed, который формирует команду sed, которая тем же самым экземпляром sed'а исполняется
Ленивая Бестолочь все правильно понял по поводу аналогии с LISP'ом
а sed типа вашего листинга директорий - супер удобная штука
Модератор: Модераторы разделов
спорно. в некоторых случаях sed - самое простое, а сл-но самое понятное. ИМХО.
ну я изначально не предполагал "всё делать sed'ом"
diesel писал(а): ↑08.06.2009 11:03ЗЫЖ Я пытался реализовать в sed рекурсию... Частично получилось. Я пришёл к выводу, что хотя это и возможно, но настолько жутко и уродливо, что совершенно не применимо на практике.
угу, как я уже сказал - на практике sed за пределами d и s - сомнительной полезности штука
Код: Выделить всё
A | B | CКод: Выделить всё
A|sed|B|sed|CКод: Выделить всё
A|sed 's/.*/B &/e'|CdrBatty писал(а): ↑08.06.2009 13:25что касается UnixWay... что-то все утилиты принимают текст, и отдают текст, и практически все не понимают того, что отдают они сами. Например:
дана задача Z, которую можно разбить на 3 подзадачи Z1, Z2, Z3, причём у нас есть утилитки для решения этих подзадач A, B, C
Логично написать
Код: Выделить всё
A | B | C
что-бы каждая утилита выполнила свою подзадачу, вот только B требует данные от A вовсе не в том формате, который даёт A. И что делать? писать свою программу, которая заменяет A, B, C? очередной велосипед... проще написать
Код: Выделить всё
A|sed|B|sed|C
А может и
Код: Выделить всё
A|sed 's/.*/B &/e'|C
Вам так не кажется?
minoru-kun писал(а): ↑08.06.2009 14:08Для начала, наверное, надо бы почитать маны постарательнее и убедиться, что утилиты действительно не обладают достаточными возможностями форматирования.
drBatty писал(а): ↑08.06.2009 19:18minoru-kun писал(а): ↑08.06.2009 14:08Для начала, наверное, надо бы почитать маны постарательнее и убедиться, что утилиты действительно не обладают достаточными возможностями форматирования.
да?
в большинстве случаев и ман читать не обязательно, для того что-бы понять, что это невозможно. например
Нужна прога - если зашли как root, отсылает мне сообщение
ну и каким ключём мне заставить ps выполнять xmessage?
а ман читать конечно придётся. и не один а четыре(к A, B, C и к самой sed), т.ч. чтение манов я вовсе и не отменяю.
drBatty писал(а): ↑08.06.2009 19:18в большинстве случаев и ман читать не обязательно, для того что-бы понять, что это невозможно. например
Нужна прога - если зашли как root, отсылает мне сообщение
ну и каким ключём мне заставить ps выполнять xmessage?
жёстко. но полезно ИМХО.
drBatty писал(а): ↑08.06.2009 13:25то, что есть некоторые задачи для которых sed не предназначена, вовсе не ограничивает возможности теми 2м командами, которые вы освоили
вот пример: Как создать html страницу shell скриптом?
там чуть выше есть пример на bash, кривой только. кривой он вовсе не потому, что автор криворукий, просто сама задача(преобразовать текст) не предназначенна для bash, а вот sed неплохо сработала.
Код: Выделить всё
/sbin/ifconfig | sed -e 's!^ *!\t!; s! *!\t!' |
awk 'BEGIN{print "<html><head><title>ifconfig</title></head><body>"; t=0; FS="\t"}
!/./{t=1}
/./{ if(t==1){print "</table><table>"; t = 0}; print "<td><tr>"$1"</tr><tr>"$2"</td></tr>" }
END{ print "</table></body></html>"}'drBatty писал(а): ↑08.06.2009 13:25sed - это вовсе не фильтр, это язык программирования, для обработки текстов. Он идеально подходит для не слишком сложной обработки, в случае если задача уже достаточно сложная для применения стандартных фильтров(вроде grep или tail), но ещё недостаточно сложна, что-бы для решения писать специальную утилиту(например на том-же C++)..
drBatty писал(а): ↑08.06.2009 13:25что-бы каждая утилита выполнила свою подзадачу, вот только B требует данные от A вовсе не в том формате, который даёт A. И что делать? писать свою программу, которая заменяет A, B, C? очередной велосипед... проще написать
Код: Выделить всё
A|sed|B|sed|C
А может и
Код: Выделить всё
A|sed 's/.*/B &/e'|C
Вам так не кажется?
diesel писал(а): ↑09.06.2009 11:58То есть это утилита специально созданная для поиска чего-то в файле(ах), которая это умеет делать хорошо и по всякому-разному. Вы, конечно, можете тут щас начать травить байки по поводу того что sed'ом это тоже все можно, и даже приводить какие-то скрипты на sed'е которые это все делают, заточенные под конкретную странную задачу.
ну это говорит только о незнании и непривычности sed. так можно доказать и то, что BASIC лучше С++, или виндовс лучше Linux.diesel писал(а): ↑09.06.2009 12:45Более того: скрипт на bash'е гораздо более читаемый чем ваша строчка на sed'е, и человек, который с bash'ем на Вы, увидев его смог осознать как оно работает, и как ему переделать это для своих собственных нужд. В этот же самый скрипт на bash'е будет гораздо легче чего-нить добавить: например вывод еще какой-нить команды, чем в скрипт на sed'е.
для вас...
ну мало-ли...
diesel писал(а): ↑09.06.2009 12:45ну вот как раз здесь в первом случае sed будет заниматься вполне себе своим делом(и как раз таки в рамках s и d :-D), второй случай - лучше так не делать, если речь идет всего лишь о преобразовании формата входных данных. Просто потому что входные данные могут измениться, а искать B внутри sed'а и удалять лишнее, дольше, чем просто удалить sed из pipe'а.
drBatty писал(а): ↑09.06.2009 14:34ну это говорит только о незнании и непривычности sed. так можно доказать и то, что BASIC лучше С++, или виндовс лучше Linux.diesel писал(а): ↑09.06.2009 12:45Более того: скрипт на bash'е гораздо более читаемый чем ваша строчка на sed'е, и человек, который с bash'ем на Вы, увидев его смог осознать как оно работает, и как ему переделать это для своих собственных нужд. В этот же самый скрипт на bash'е будет гораздо легче чего-нить добавить: например вывод еще какой-нить команды, чем в скрипт на sed'е.
diesel писал(а): ↑09.06.2009 23:25да, это говорит о незнании и непривычности sed. но поскольку мы говорим в принципе о реальном мире и реальных задачах, то "незнание и непривычность" решения тоже нужно принимать во внимание, поскольку непонятный скрипт, на понимание которого уйдет много времени, может быть абсолютно бесполезным для тех кто его будет пытаться применить на практике: явно где-то глючит, но пока найдешь где... лучше новый написать
смотря для чего применяется wordpad, если для того, что-бы каждый понедельник, в 7 утра поменять в каком-то файле строчки 23-45, так что-бы в них не было слов из строчки 713 - то sed мне кажется единственно верным решением