Command and Conquer - Output Formmating |
- Statistics
- Participants
- Translate into Russian
- Translation result
- Translation complete.
В этом выпуске мы расскажем об основных возможностях форматирования вывода с помощью команд grep, sed, awk, cat и cut. Это может быть очень полезным, если соединять вместе такие вещи как Conky или скрипты, которые отображают информацию в терминале.
Первая команда, работу которой мы рассмотрим, это - cut. Если, например, мы хотим отобразить название файла в скрипте, мы найдем его в /etc/issue. Если, не смотря на это, мы выполним cat /etc/issue, мы увидим, что есть одна длинная строка со множеством экранирующих символов в ней. Так, если мы выполним cat /etc/issue | head -n 1, мы уберем дополнительную строку, сузив вывод команды cat с помощью команды head, которая оставит только первую строку вывода. Пока все хорошо, но что на счёт специальных символов? Для таких случаях у нас есть cut. Чтобы её использовать, мы должны указать разделитель, а затем сказать ей, что делать с ним. Мы выполним следующую команду:
Эта команда говорит cut использовать в качестве разделителя знак пробела, и показать первые два поля (по существу, cut делит вывод на сегменты в соответствии с разделителем, поэтому поля 1 и 2 - это первые поля перед и после разделителем, в нашем случае это Ubuntu 8.10). Cut также можно использовать для отображения только определенного числа символов, используя флаг -c.
Тоже самое можно сделать с помощью команды sed:
Это может показаться лишним, но первые два выражения (каждое из них разделено двоеточием) говорит sed заменить “\n” на “” (ничего), и тоже самое для “\l”, убирая эти символы из вывода. Команда “/^$/d” говорит sed удалить все пустые строки (“^$” - это регулярное выражение для строки, которое начинается и заканчивается пустым символов, и по середине тоже ничего нет - т.е. пустая строка). Так 's/\\n\b//' просто говорит sed заменить (“s/”) “\n” (“\\n”) на “” (“//”). Причина, по которой эта команда в скобках, в том, что мы применяем три выражения на выходе, и хотим, чтобы результат появился только один раз, поэтому мы поместили выражения в скобки (“{}”), и разделили двоеточием.
В заключении, такой же результат может быть получен с помощью awk:
Эта команда тоже использует регулярные выражения, но её легче понять, чем sed. В основе , awk '/\n/ {print $1, $2}' ищет любую строку, в которой есть “\n”, и затем печатает первые два поля (разделитель по-умолчанию - это пробел, но вы можете определить свой с помощью флага -F).
Это позволяет нам отбросить лишнюю строку и \l из вывода команды. Вы можете также отказаться от обрезания вывода cat /etc/issue в команде (или любой другой), так же они все могут быть применены к определенному файлу в конце команды. Я использовал cat для того, чтобы оставить команды более понятными.
Всё это обозначается только как предварительный взгляд на возможности awk, sed и cut. Из-за их гибкой реализации сложно написать краткое вводное руководство для всех них. Пояснения приведены, чтобы показать, как команды работают, а не описывать их полный потенциал. В реальном мире использование этих команд будет в первой половине любого собственного скрипта (ниже приведен пример, который также выводит информацию о скрипте, но часть не обязательно подходит к этой статье; она оставлена, чтобы оставить скрипт завершенным).
Пример также содержит вызов для каждого, кто желает его попробовать: Сообразите, как использовать одну из трех команд, чтобы убрать параграф в памятной части скрипта, и, если вы хотите больше практики, попробуйте заменить каждое использование cut, sed или awk на другую команду, делающую тоже самое (т.е. заменить команду cut на awk). Нет никакого приза, но это хорошая практика, чтобы понять внутреннюю работу этих команд.
Original (English): Command and Conquer - Output Formmating
Translation: © slavic, bambrik .
License: Creative Commons Attribution-Share Alike 3.0 Unported License
