Васильев Андрей Михайлович, 2024
Версии презентации
pipe
  #
Помимо соединения потоков ввода и вывода с файлами Bash (операционная система) позволяет соединять поток вывода одного процесса с потоком ввода другого процесса
Данный механизм называется pipe, конвеер
В Bash для связи потоков двух процессов используется оператор |:
КОМАНДА-1 | КОМАНДА-2В результате будут запущены КОМАНДА-1 и КОМАНДА-2, причём стандартный вывод
КОМАНДА-1 будет подключён ко входу в конвеер, а выход конвеера подключён к
стандартному входу программы КОМАНДА-2
Результат выполнения команды может не поместиться на экран, вследствие чего пользователю приходится просматривать предыдущий вывод
Ctrl + Page Up, Ctrl + Page DownShift + 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
zeouuniq
  #
Выбрасывает из входящего потока данных повторяющиеся строки. Зачастую используется вместе с sort
Исходный файл:
abc
abc
def
abc
def
def
defОтброс с сортировкой:
> cat data.txt | sort | uniq
abc
defОтброс без сортировки:
> cat data.txt | uniq
abc
def
abc
defwc
  #
Приложение wc предназначено для вычисления статистических харакретистик в файле или потоке данных:
Для поиска уникально названных исполняемых файлов из каталогов /bin и /usr/bin можно воспользоваться командой
$ ls /bin /usr/bin | sort | uniq | wc -l
3846grep
  #
$ 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
gunziphead
  #
Приложение head показывает первые строки файла или стандартного потока ввода
Для управления количеством показываемых линий используется аргумент -n
$ ls /usr/bin | head -n 4
[
411toppm
7z
7zatail
  #
Приложение 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.logtee
  #
Термином 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
Степан 5400sed
  #
Данный текстовый редактор позволяет выполнять операции над отдельными строками в файле или в потоке данных
$ 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 linuxjq
  #
$ echo '{"fruit":{"name":"apple","color":"green","price":1.20}}' | jq '.'{
  "fruit": {
    "name": "apple",
    "color": "green",
    "price": 1.2
  }
}Структурированная обработка:
$ jq '.fruit.color' fruit.json"green"