Васильев Андрей Михайлович, 2024
Версии презентации
pipe
#
Помимо соединения потоков ввода и вывода с файлами Bash (операционная система) позволяет соединять поток вывода одного процесса с потоком ввода другого процесса
Данный механизм называется pipe
, конвеер
В Bash для связи потоков двух процессов используется оператор |
:
КОМАНДА-1 | КОМАНДА-2
В результате будут запущены КОМАНДА-1
и КОМАНДА-2
, причём стандартный вывод
КОМАНДА-1
будет подключён ко входу в конвеер, а выход конвеера подключён к
стандартному входу программы КОМАНДА-2
Результат выполнения команды может не поместиться на экран, вследствие чего пользователю приходится просматривать предыдущий вывод
Ctrl + Page Up
, Ctrl + Page Down
Shift + Page Up
, Shift + Page Down
Приложение less
позволяет просматривать не только текстовые файлы, но также и
длинный ввод со стандартного потока
Чтобы найти нужную информацию в потоке данных их можно передать less
ls -l /usr/bin | less
Для удобной обработки текстовой информации, приходящей от приложений в UNIX можно использовать приложения, нацеленные на обработку потока строк, приходящих на стандартный поток ввода
Благодаря конвеерам эти приложения зачастую объединяются
КОМАНДА | ФИЛЬТР-1 | ФИЛЬТР-2 | ФИЛЬТР-3
Фильтры ориентированы на работу со структурированными данными
sort
#
Приложение сортирует входящий поток строк
Рассмотрим текстовый файл data.txt
:
euo
aoeu
zeou
Сортировка файла:
$ cat data.txt | sort
aoeu
euo
zeou
uniq
#
Выбрасывает из входящего потока данных повторяющиеся строки. Зачастую используется вместе с sort
Исходный файл:
abc
abc
def
abc
def
def
def
Отброс с сортировкой:
> cat data.txt | sort | uniq
abc
def
Отброс без сортировки:
> cat data.txt | uniq
abc
def
abc
def
wc
#
Приложение wc
предназначено для вычисления статистических харакретистик в файле или потоке данных:
Для поиска уникально названных исполняемых файлов из каталогов /bin
и /usr/bin
можно воспользоваться командой
$ ls /bin /usr/bin | sort | uniq | wc -l
3846
grep
#
$ grep --help
Использование: grep [ПАРАМЕТР]… ШАБЛОНЫ [ФАЙЛ]…
Поиск ШАБЛОНОВ в каждом ФАЙЛЕ.
Пример: grep -i 'hello world' menu.h main.c
> ls /bin /usr/bin | sort | uniq | grep zip
bunzip2
bzip2
bzip2recover
funzip
gpg-zip
gunzip
head
#
Приложение head
показывает первые строки файла или стандартного потока ввода
Для управления количеством показываемых линий используется аргумент -n
$ ls /usr/bin | head -n 4
[
411toppm
7z
7za
tail
#
Приложение tail
показывает последние строки файла или стандартного потока ввода
$ ls /usr/bin | tail -n 4
zipnote
zipsplit
zoom
zsh
Некоторые приложения постоянно записывают информацию в файл, например для ведения журнала своей деятельности
Приложение tail
позволяет следить за изменениями в файле
tail -f info.log
В одной консоли будем следить за состоянием файла:
$ touch work.log
$ tail -f work.log
abc
def
def
tail: work.log: файл усечён
info
В другой консоли будем изменять данный файл:
$ echo 'abc' > work.log
$ echo 'def' >> work.log
$ echo 'def' >> work.log
$ echo 'info' > work.log
tee
#
Термином tee
называется Т-образный отвод трубопровода
Приложение tee
принимает данные на стандартный поток ввода, а затем записывает их на стандартный поток вывода и в файл на жёстком диске
Это приложение удобно использовать для отслеживания промежуточного или финального состояния команды, использующей конвееры
$ ls /usr/bin | grep zip | tee -a zip-list | wc -l
21
$ cat zip-list
funzip
gpg-zip
lzip
...
awk
#
AWK — это инструмент и скриптовый язык, предназначенный для работы с текстовыми документами
$ cat workers.txt
Василий менеджер 10000
Иван разработчик 5000
Ира аналитик 5500
Михаил разработчик 5100
Степан аналитик 5400
$ awk '{print $1,$3}' workers.txt
Василий 10000
Иван 5000
Ира 5500
Михаил 5100
Степан 5400
sed
#
Данный текстовый редактор позволяет выполнять операции над отдельными строками в файле или в потоке данных
$ sed --help
Использование: sed [ПАРАМЕТР]… {только-сценарий-если-нет-другого-сценария} [входной-файл]…
...
$ cat info.txt
linux is great os. unix is opensource. unix is free os.
learn operating system.
linux linux which one you choose.
linux is easy to learn.unix is a multiuser os.Learn unix
$ cat info.txt | sed 's/unix/linux/2'
linux is great os. unix is opensource. linux is free os.
learn operating system.
linux linux which one you choose.
linux is easy to learn.unix is a multiuser os.Learn linux
jq
#
$ echo '{"fruit":{"name":"apple","color":"green","price":1.20}}' | jq '.'
{
"fruit": {
"name": "apple",
"color": "green",
"price": 1.2
}
}
Структурированная обработка:
$ jq '.fruit.color' fruit.json
"green"