просто хочу знать, в чем главные различия между ними? и власть каждого языка (где его лучше использовать).
Изменить: это не "против" как тема, просто информация.
просто хочу знать, в чем главные различия между ними? и власть каждого языка (где его лучше использовать).
Изменить: это не "против" как тема, просто информация.
В порядке появления языки sed
, awk
, perl
, python
.
Программа sed
является редактором потоков и предназначена для применения действий от script к каждой строке (или, в более общем смысле, к указанным диапазонам строк) входного файла или файлов. Его язык основан на ed
, редакторе Unix, и хотя он имеет условные обозначения и т.д., Для сложных задач работать сложно. Вы можете воздействовать на него с небольшими чудесами - но ценой на волосы на голове. Тем не менее, это, вероятно, самая быстрая программа при попытке выполнить задачи в рамках ее мандата. (Он имеет наименее мощные регулярные выражения обсуждаемых программ - адекватен для многих целей, но, конечно же, не PCRE - регулярные выражения, совместимые с Perl)
Программа awk
(имя из инициалов ее авторов - Aho, Weinberger и Kernighan) - инструмент, первоначально предназначенный для форматирования отчетов. Его можно использовать в качестве суппорта sed
; в его более поздних версиях, это вычислительно завершено. Он использует интересную идею - программа основана на "сопоставленных шаблонах" и "действиях, предпринятых при совпадении шаблона". Шаблоны довольно мощные (расширенные регулярные выражения). Язык для действий аналогичен C. Одной из ключевых особенностей awk
является то, что он автоматически разбивает строки ввода на поля.
Perl был написан частично как awk-killer и sed-killer. Две из предоставленных программ: a2p
и s2p
для преобразования скриптов awk
и sed
в Perl. Perl является одним из самых ранних из следующего поколения языков сценариев (Tcl/Tk, вероятно, может претендовать на первенство). Он имеет мощную интегрированную регулярную обработку выражений с гораздо более мощным языком. Он обеспечивает доступ практически ко всем системным вызовам и имеет расширяемость модулей CPAN. (Ни awk
, ни sed
не существует.) Одним из девизов Perl является "TMTOWTDI - там более одного способа сделать это" (произносится как "tim-toady" ). Perl имеет "объекты", но это скорее дополнение, чем фундаментальная часть языка.
Питон был написан последним и, вероятно, частично как реакция на Perl. В нем есть интересные синтаксические идеи (отступы для обозначения уровней - без брекетов или эквивалентов). Он более объектно ориентирован, чем Perl; он столь же расширяем, как и Perl.
OK - когда использовать каждый?
Я не знаю ничего, что Perl может сделать, что Python не может, и наоборот. Выбор между ними будет зависеть от других факторов. Я изучил Perl, прежде чем появился Python, поэтому я стараюсь использовать его. Python имеет меньший усиленный синтаксис и, как правило, несколько проще изучить. Perl 6, когда он станет доступным, станет увлекательным развитием.
(Обратите внимание, что "обзоры" Perl и Python, в частности, ужасно неполны, на эту тему могут быть написаны целые книги.)
После освоения нескольких десятков языков вы устали от таких людей, как С. Лотт (см. его спорный ответ на этот вопрос, почти на половину меньше голосов (+ 45/-22) через шесть лет после ответа).
Sed - лучший инструмент для чрезвычайно простых конвейеров командной строки. В руках мастера sed он подходит для одноразовых задач произвольной сложности, но не должен использоваться в производственном коде, за исключением очень простых подстановочных конвейеров. Такие вещи, как 's/this/that/.'
Gawk (GNU awk) на сегодняшний день является лучшим выбором для сложного переформатирования данных, когда есть только один источник входного сигнала и один вывод (или несколько последовательно выведенных последовательностей). Так как большая часть реальной работы соответствует этому описанию, и хороший программист может научиться gawk через два часа, это лучший выбор. На этой планете проще и быстрее!
Perl или Python намного лучше, чем любая версия awk или sed, когда у вас очень сложные сценарии ввода/вывода. Чем сложнее проблема, тем лучше вы используете python, с точки зрения обслуживания и удобочитаемости. Обратите внимание, однако, что хороший программист может писать читаемый код на любом языке, а плохой программист может писать недостижимое дерьмо на любом полезном языке, поэтому выбор perl или python можно смело оставить в предпочтении программиста, если указанный программист квалифицированным и умным.
Во-первых, в списке есть две несвязанные вещи: "Perl, Python awk и sed".
Thing 1 - упрощенные инструменты для обработки текста.
СЭД. Он имеет фиксированную, относительно простую область работы, определяемую идеей чтения и изучения каждой строки файла. sed не предназначен для того, чтобы быть особенно читаемым. Он разработан, чтобы быть очень маленьким и очень эффективным на очень маленьких серверах unix.
AWK. Он имеет несколько менее фиксированный, менее простой объем работы. Однако основной цикл awk-программы определяется неявным чтением строк исходного файла.
Это не "полные" языки программирования. Хотя вы можете - с некоторой работой - писать довольно сложные программы в awk, это быстро становится сложным и трудным для чтения.
Вещь 2 - языки программирования общего назначения. Они имеют богатое разнообразие типов операторов, множество встроенных структур данных и не связаны с проводными предположениями или ярлыками.
Perl.
Python.
Когда их использовать.
СЭД. Никогда. Это действительно не имеет значения в современную эпоху компьютеров с более чем 32 КБ памяти. Perl или Python делают то же самое более четко.
AWK. Никогда. Как и sed, он отражает более раннюю эпоху вычислений. Вместо того, чтобы поддерживать этот язык (в дополнение ко всем другим, необходимым для успешной системы), более приятно делать все на одном приятном языке.
Perl. Любая проблема программирования любого рода. Если вам нравится свободно мыслящий синтаксис, в котором есть много разных способов сделать одно и то же, perl - это весело.
Python. Любая проблема программирования любого рода. Если вам нравится довольно ограниченный синтаксис, где меньше вариантов, меньше тонкости и (возможно) большей ясности. Объектно-ориентированный характер Python делает его более подходящим для больших сложных проблем.
Фон - я не избиваю sed и awk из-за незнания. Я узнал awk более 20 лет назад. Много ли было с ним; используется для обучения в качестве основного навыка unix. Я узнал о Perl около 15 лет назад. С ним много сложных вещей. Я оставил оба, потому что я могу делать то же самое в Python - и это проще и понятнее.
Есть две серьезные проблемы с sed и awk, ни один из которых не является их возрастом.
Неполнота их реализации. Все sed и awk можно сделать в Python или Perl, часто более просто, а иногда и быстрее. Контейнер с оболочкой имеет некоторые преимущества в производительности благодаря своей многопроцессорной обработке. Python предлагает модуль subprocess
, позволяющий мне восстановить эти преимущества.
Необходимость изучения еще одного языка. Выполняя вещи в Python (или Perl), ваша реализация зависит от меньшего количества языков, что приводит к увеличению ясности.
Я бы не назвал sed полноценным языком программирования, это редактор потоков с языковыми конструкциями, предназначенный для программного редактирования текстовых файлов.
Awk - это немного больше языка общего назначения, но он все же лучше всего подходит для обработки текста.
Perl и Python являются полноценными языками программирования общего назначения. Perl имеет свои корни в обработке текста и имеет ряд awk-подобных конструкций (в сети есть даже awk-per-perl script). Есть много различий между Perl и Python, ваш лучший выбор - это, вероятно, прочитать резюме обоих языков на чем-то вроде Википедии, чтобы получить хорошее представление о том, что они собой представляют.
Когда их использовать: awk - never - S. Lott.
Я думаю, что С. Лотт немного упустил эту рекомендацию. Дело в том, что в Linux и других средах UNIX awk - полезный инструмент, который можно использовать с bash, sh и ksh для быстрой обработки текста. Сама идея создания сценариев - это решение вашей проблемы путем склеивания этого инструмента, этого инструмента. Следовательно, в сценариях администратора обычно есть ls, grep, |, awk, time, ps и т.д. Каждый из них - это инструмент, который скриптер сочетает в себе как кирпичик за кирпичом, чтобы завершить строительство (чтобы решить проблему под рукой),
Например, я являюсь членом команды команды принадлежности для пейнтбола дотком. Этот сайт электронной коммерции основан на стеке LAMP. Для автоматической обработки и нормализации каналов передачи данных от разных поставщиков в базу данных на заднем плане мы используем и поддерживаем разнообразное сочетание сценариев, включая bash, perl, php и даже ожидаем. Каждый из них имеет свои преимущества на основе доступных модулей и API. В сценариях bash мы выполняем быстрые шаблоны и соответствующие действия по шаблонам при необходимости с помощью awk без необходимости переключения на PERL. Одна вещь, которую я также хотел бы отметить, которая не была подчеркнута в потоке, заключается в том, что справедливое количество этих скриптов было куплено или получено из открытого источника. Если script появился как Perl, мы поддерживаем его как Perl; если script появился как Php, мы поддерживаем его как Php; если он пришел как bash, мы поддерживаем его как bash; мы не переписываем его на другом языке только потому, что считаем, что он менее эффективен на языке оригинала.