О редакторе sed

Отредактировать файл – что может быть проще? Открыл в любом текстовом редакторе – и гоняй курсор по экрану туда-сюда, насколько позволит монитор. Но... так было не всегда.
Помню, в школе мы работали на ЭВМ СМ-4, у которой были разные терминалы – польские, кубинские (!) и советские. Так вот, для советского терминала редактор был строчный. То есть оператор мог видеть и редактировать только одну строку, а остальные должен был держать в уме. Очень удобно, да.
С тех пор много воды утекло, но строчные редакторы и не думают умирать. Среди набора утилит GNU, вдохновлённого великим Ричардом Столлманом, есть редактор sed, который работает с единственной строкой. Хорош он тем, что файл редактирует робот, набор инструкций которого чем-то напоминает черепашку из детского языка Logo.
До сих пор моё знакомство с этим инструментом было скорее теоретическим, но недавно появилась у меня странная задача – посчитать количество функций, объявленных в заголовочном файле языка C. И вот тут...
Впрочем, дальше уже идёт тарабарщина, поэтому прячу её под кат.
cat db2api.h | \ sed -r 's#\/\*.*\*\/##g' | \ sed -r 's#\/\*.*$##;T;: nl;N;s#^.*\*\/##;t;s#^.*$##;b nl' | \ sed -r 's/^#define//;T;: cont;s/.*\\\s*$//;T eof;n;b cont;: eof;d' | \ grep -vE '^#' | \ grep -vE '^\s*$'
Первая команда удаляет однострочные комментарии. Вторая команда удаляет многострочные комментарии. Третья команда расправляется с директивами препроцессора #define, включая многострочные. И наконец два финальных grep’а расправляются с остальными директивами препроцессора и пустыми строками.
Наверно, можно было копать и дальше, но оказалось, что теперь достаточно посчитать количество открывающих круглых скобок. Их оказалось 486...
|
</> |