$ grep KDE **/*html
выведет все строки с упоминанием KDE в html-файлах каталога текущего и вложенных. А в форме
$ grep -i kde **/kde*.html
она произведёт аналогичный поиск только в файлах вида kde01.html, kde02.html и так далее. Причём без учёта регистра — но к мадемуазель Zsh, интересы которой я представляю в данный момент, это не имеет никакого отношения.
Перенаправление расширенное и множественное
Что такое перенаправление ввода/вывода — знают все применители CLI. Однако в Zsh возможности его очень широки, почему оно и называется здесь расширенным перенаправлением. Этот механизм позволяет в ряде случаев обходиться без некоторых команд вообще. Например, обычно для просмотра текстового файла применяют или команду cat, или команды-пейджеры типа more, less, most. Выбор между конкатенатором и одним из пейджеров определяется ситуацией, выбор внутри «тройки по борьбе с басмачамифайлами» зависит от привычек или предпочтений. Однако Zsh может избавить применителя от мук буриданова осла, подменяя любую из этих команд оператором перенаправления в виде команды
$ < filename
Результатом чего будет постраничный вывод содержимого файла, подобный таковому любого пейджера.
С помощью того же оператора можно просмотреть одновременно содержимое двух файлов — то есть, конечно, не одновременно, а последовательно, но в едином потоке. То есть команда
$ < {zshenv,zshrc}
покажет оба файла как одно целое. Причём в данном случае можно поступить ещё проще, ибо маски имён файлов также не возбраняются:
$ < z*
Кстати, в терминах Zsh развёртывание масок имён файлов называется globbing — с ним мы уже сталкивались в рассказе о рекурсивном поиске.
Число «оперируемых» файлов ничем не ограничено, кроме здравого смысла и целесообразности. Так, есть резон проглядеть таким образом на скорую руку, как будут выглядеть 5-6 заметок по несколько строк каждая, если их объединить в одну статью. Но просматривать с помощью оператора перенаправления книжку, состоящую из пары десятков глав по много страниц каждая, уже явный перебор.
Однако бывают случаи, когда большое число «оперируемых» файлов очень даже уместно. Например, если требуется объединить ряд текстовых фрагментов в единый файл. И тогда, легким движением рук набрав в командной строке конструкцию
$ < chapter[01-10] > mybook
мы на выходе из разрозненных глав получаем готовую книгу.
Таким образом мы перешли уже к множественному перенаправлению. Применение которого просмотром файлов не исчерпывается — их содержимое может быть перенаправлено не только на стандартный вывод, но и на ввод какой-либо команды, подменяя командный конвейер. Например, конструкция вида
$ sort < file_{1,2}
совместно отсортирует строки обоих файлов, file_1 и file_2, точно так же, как это сделал бы конвейер команд
$ cat file_1 file_2 | sort
Кстати, перенаправление вполне может играть с конвейерами в одной команде. Например, конструкция вида
$ time commandname [options] [arguments] > filename | cat
занесёт время выполнения некоей команды в файл с одновременным выводом его на экран, заменяя команду tee. Это особенно полезно при всяких «тестированиях на быстродействие», когда надо и сохранить результат для дальнейшей обработки, и не терпится посмотреть на него сразу.
Множественное перенаправление удобно использовать для суммарного подсчёта числа символов в нескольких файлах таким образом:
$ wc -m <*txt
Что на выводе даст единственное число, например:
5382
Казалось бы, та же команда в «обычной» форме даже короче на один символ:
$ wc -m *txt
Однако вывод её будет развёрнут:
2820 my_file_1.txt
606 my_file_2.txt
401 my_file_3.txt
1555 my_file_4.txt
5382 итого
Что при работе во встроенных терминальных окнах текстовых редакторов вроде Geany или Kate , часто небольших по размеру может оказаться лишним. А ведь именно там приёмы, подобные описанным в этом разделе, оказываются весьма эффективными.
В общем, уже за одну только конструкцию < filename разработчики Zsh заслужили памятник, а все остальные возможности расширенного и множественного перенаправления выступают как бесплатное приложение к ней.
Просто псевдонимы и псевдонимы глобальные
Что такое псевдонимы, по простому aliases, — знают все, кто применяет любую командную оболочку: их поддержка существует со времён перворождённого шелла Борна. Это один из простых способов минимизировать ввод командных директив, начиная с простейшего рекурсивного копирования файлов:
alias cp='cp -R'
Читать дальше