Автор оригинала: Vlad Mihalcea.
Почему ВИМ?
Рано или поздно наступит день, когда ваша простая в использовании среда IDE станет бесполезной для обработки огромных файлов. Существует не так много редакторов, способных работать с очень большими файлами, например, с производственными журналами.
Недавно мне пришлось проанализировать однострочный файл JSON объемом 100 МБ, и еще раз VIM спас этот день. VIM, как и многие другие утилиты Unix, одновременно сложен и великолепен.
Git interactive rebase использует VIM по умолчанию, и если вы все еще не уверены, возможно, эта отличная статья заставит вас передумать.
Давайте посмотрим, как легко вы можете распечатать файл JSON с помощью VIM. Сначала мы загрузим однострочный файл JSON с Reddit.
$ wget http://www.reddit.com/r/programming.json --2014-01-24 12:21:04-- http://www.reddit.com/r/programming.json Resolving www.reddit.com (www.reddit.com)... 77.232.217.122, 77.232.217.113 Connecting to www.reddit.com (www.reddit.com)|77.232.217.122|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 28733 (28K) [application/json] Saving to: `programming.json' 100%[======================================>] 28,733 --.-K/s in 0.03s 2014-01-24 12:21:04 (1021 KB/s) - `programming.json' saved [28733/28733]
Вот как это выглядит:
Красивая печать
Python поставляется вместе с большинством дистрибутивов Unix, поэтому выполнение следующей команды VIM позволяет выполнить трюк:
%!python -m json.tool
Давайте сохраним довольно напечатанный файл JSON и включим в работу другие инструменты Unix.
:w programming_pretty.json
Время совпадения
Допустим, мы хотим извлечь все значения, связанные с “доменом”:
"domain": "mameworld.info"
Сэд спешит на помощь
$ sed -nr 's/^.*"domain":\s*"(.*?)".*$/\1/p'
Многострочное сопоставление
Sed ориентирован на линию, и, хотя он предлагает многострочную поддержку, он не подходит для Perl. Допустим, я хочу сопоставить всех авторов в следующем шаблоне JSON:
"data": { "author": "justrelaxnow", }
Вот как я это делаю:
$ perl -0777 -n -e 'print "$2\n" while (m/("data":\s*\{.*?"author":\s*"(.*?)"[,|\s*\}].*?\},)/sgmp)' programming_pretty.json | sort -u AmericanXer0 azth bionicseraph bit_shiftr charles_the_hard Gexos jakubgarfield johnwaterwood joukoo justrelaxnow Kingvash krets mariuz mopatches nyphrex pseudomind rluecke3 sltkr solidus-flux steveklabnik1 sumstozero swizec vocalbit Wolfspaw
Вывод
Инструменты Unix-это старая школа, некоторые из них были написаны сорок лет назад. Кривая обучения может быть крутой, но их изучение-отличная инвестиция. Отличная библиотека программного обеспечения выдерживает испытание временем, и инструменты Unix являются хорошим напоминанием о том, что трудная работа требует сложных инструментов.