Бывали ли у вас случаи когда необходимо отформатировать выходной поток программ? Если до сих пор таких случаев не было то я уверен вскоре они у вас появятся. Как пример я столкнулся с этой проблемой когда настраивал conky для вывода на экран содержимого файла /var/log/syslog. Многие знают о существовании такой команды как tail и о ее возможностях (показывать указанное число строк в конце определенного файла) но вывод этой команды отображает каждую строку полностью. Таким образом выводиться кроме полезной информации еще и куча системной и бесполезной с точки зрения штатного пользователя информации. Я решил это с помощью создания конвейера. В связке с командой tail теперь работает команда cut, задача которой обрезать ненужные данные и уменьшать количество выводимой информации. Мой пример:
tail -n6 /var/log/syslog | cut -d ' ' -f6-
О таких примерах обработки (форматирования) выходных потоков пойдет дальше речь.
Теперь подробнее:
Команда tail используется с ключом -n6 это указывает на то что выводиться будут только последние шесть строк файла /var/log/syslog. Знак вертикальной черты | для тех кто еще не в курсе обозначает конвейер (то есть выходной поток команды tail передается в входной поток команды cut). Команда cut принимает эти 6 строк и выбирает из каждой строки все столбцы начиная с шестого. Замете что мы указываем символ который разделяет эти условные столбики (в моем случае это знак пробела ' ', обязательно обрамлен кавычками). В связке это помогает отсеять ненужную информацию из syslog для вывода на экран пользователя.
Такой простой пример является частным случаем использования команды cut. Потому давайте рассмотрим спектр ее возможностей.
Команда cut
Команда cut выводит части строк (столбцы). Столбец определяется либо по смещению в символах либо по смещению в байтах, а так же как было показано выше смещению по разделителям (в моем примере по пробелам, но по умолчанию это знаки табуляции).
Параметры команды:
-b выводит только указанные байты из позиций.
Пример:
cut -b7
выводит только седьмые байты из каждой строки
-c выводит только указанные символы из позиций.
Пример:
cut -c7
выводит только седьмые символы из каждой строки
-d задает разделитель столбцов входного файла вместо символа табуляции. Применяется совместно с опцией -f.
-f выводит только перечисленные столбцы. По умолчанию столбцы разделяются символами табуляции
Пример:
cut -d -f7
выводит только седьмой столбец из каждой строки (разделитель табуляция)
Пример:
cut -d '-' -f7
Разделитель знак тире
-s не выводит строки, в которых отсутствует разделитель полей. Применяется совместно с опцией -f.
-n не разбивает на части много байтовые символы (игнорируется).
Так же необходимо уточнить что это все касалось только одного элемента строки (байта, символа, строки). Для вывода диапазона этих элементов необходимо воспользоваться символами тире и запятыми в указании номера элемента строки.
Пример:
cut -b7-
выводит с седьмого байта по конец строки
Пример:
cut -c7,10
выводит седьмые символы и десятые из каждой строки
Пример:
cut -d ' ' -f7-10
выводит данные с седьмого столбца по десятый из каждой строки. Разделитель знак пробела.
Также хорошим инструментом в форматировании выходного потока программ можно считать команду grep.
Команда grep
Эта команда занимается поиском абзацев (либо других элементов) в файлах и в выходных потоках программ. О этой программе можно свободно писать целую статью. Я рассмотрю только часть ее возможностей только в рамках этой статьи.
По умолчанию команда grep выводит строку с искомым словом из определенного файла.
То о чем следует помнить при использовании этой команды.
- Использовать только одинарные кавычки (двойные обозначают переменную)
- Команда по умолчанию выполняет поиск с учетом регистра (что бы его отключить необходимо использовать параметр -i)
- По умолчанию grep ищет любые совпадения искомого слова. Для того что бы искать только точные совпадения слов необходимо использовать параметр -w).
-n отображение номеров строк
-B указывает на число строк, которые будут отображаться перед строкой с искомым текстом в потоке выхода программы grep
-A указывает на число строк, которые будут отображаться после строкой с искомым текстом в потоке выхода программы grep
-C указывает на число строк, которые будут отображаться после и перед строкой с искомым текстом в потоке выхода программы grep
Пока что все. Но эта статья будет расширяться новыми командами и примерами их использования.
1 коммент. on "Форматирование выходного потока программ"
Собственно не против.
Отправить комментарий