Каждый Linux-гик должен знать Sed и Awk. Вот почему …

Версия AWK, которую распространяет GNU / Linux, написана и поддерживается Free Software Foundation (FSF); его часто называют GNU AWK.

СТРУКТУРА awk-ПРОГРАММЫ

    Программа состоит из операторов (правил), имеющих вид:

шаблон {действие} шаблон {действие}

{действие}   — когда действие выполняется для всех строк. шаблон      — когда выводятся строки с данным шаблоном. Действие может состоять из последовательности операторов, разделяемой «;» или переводом строки или закрывающей скобкой.

Пример:

Ищет в файле f-awk строки с символами «79» и выводит их на std-out

$0 — выводит полностью всю строку

$1,2 и тд. след столбец в данной строке

awk ‘/79/ {print($1)}’ f-awk

Основные

Помощь

Забыли аргументы для cp? Какая опция у команды mkdir? Вот вам подсказка:

help nano # кратко о команде “nano” man nano # подробная информация о “nano”

Конвейер

Зачастую с его помощью перенаправляют вывод одной команды на ввод другой или приписывают команду к файлу:

a | b # конвейер: передать вывод команды a на ввод b a > # сохранить вывод команды a в (перезаписать) a >> # сохранить вывод команды a в (добавить) echo «Hello!» | xargs echo # направить вывод первой команды, как аргумент второй

Фильтрация вывода

Бывает, что команда выводится слишком долго. В этом случае вы либо разделите страницу с помощью команды more или less, либо выведите строки, которые содержат специальное слово или предложение с grep:

cat | more # постранично показывает содержимое cat | постранично показывает содержимое , и позволяет перемещаться по файлу cat | grep “I love you” # показывает строчку, где расположена строка “I love you”

Очистка экрана

Слишком много текста в терминале? Просто напишите clear и продолжайте работать.

clear # очистка терминала

Объединяя два

Awk и Sed оба невероятно мощны в сочетании. Вы можете сделать это, используя каналы Unix. Это биты «|» между командами.

Давайте попробуем это: мы собираемся перечислить все строки в Take On Me, которые имеют более 20 символов, используя Awk. Затем мы собираемся убрать все строки, которые начинаются с «Принять». Вместе все это выглядит так:

awk ‘length($0)>20’ | sed /^Take/d

И производит это:

Теперь давайте перевернем это. Мы собираемся начать с удаления всех строк, начинающихся с Take, и затем направить их в Awk, где мы посчитаем, сколько раз появляется каждое слово. Это выглядит примерно так:

cat | sed /^Take/d | awk -f

Установка и удаление программ

Для установки и удаления программ используются различные утилиты, в зависимости от версии дистрибутива Linux. В основанных на Debian дистрибутивах (Ubuntu, Linux Mint и т. д.) для этой цели используются команды apt-get или aptitude. Первый вариант упрощенный, второй имеет большую функциональность. Некоторые действия, например, установку и удаление, нужно выполнять от root, либо использовать команду sudo.

sudo apt-get update — получение нового списка пакетов.

sudo apt-get upgrade — обновить программы, перед этим нужно обновить список пакетов, выполнив предыдущую команду. Обе команды желательно выполнять периодически (часто это делается автоматически), а также перед установкой новых программ.

sudo apt-get install mc — установка программы mc.

sudo apt-get remove mc — удаление программы mc. В дистрибутивах, основанных на Red Hat, где используются RPM-пакеты, часто используют менеджер yum.

yum update — обновление системы.

yum install mc — установка программы mc.

yum remove mc — удаление программы mc. Есть и другие пакетные менеджеры и варианты установки программного обеспечения.

Фильтры

Фильтры представляют собой стандартные команды Linux, которые могут быть использованы без каналов:

  • find — возвращает файлы с именами, которые соответствуют передаваемому аргументу
  • grep — возвращает только строки, содержащие (или не содержащие) заданное регулярное выражение
  • tee — перенаправляет стандартный ввод как стандартный вывод и один или несколько файлов
  • tr — находит и заменяет одну строку другой
  • wc — подсчитывает символы, линии и слова

Как правило, все нижеприведенные команды работают как фильтры, если у них нет аргументов (опции могут быть):

  • cat — считывает данные со стандартного потока ввода и передает их на стандартный поток вывода. Без опций работает как простой повторитель. С опциями может фильтровать пустые строки, нумеровать строки и делать другую подобную работу
  • head — показывает первые 10 строк (или другое заданное количество), считанных со стандартного потока ввода
  • tail — показывает последние 10 строк (или другое заданное количество), считанные со стандартного потока ввода. Важный частный случай tail -f, который в режиме слежения показывает концовку файла. Это используется, в частности, для просмотра файлов журнальных сообщений
  • cut — вырезает столбец (по символам или полям) из потока ввода и передает на поток вывода. В качестве разделителей полей могут использоваться любые символы
  • sort — сортирует данные в соответствии с какими-либо критериями, например, арифметически по второму столбцу
  • uniq — удаляет повторяющиеся строки. Или (с ключом -с) не просто удалить, а написать сколько таких строк было. Учитываются только подряд идущие одинаковые строки, поэтому часто данные сортируются перед тем как отправить их на вход программе
  • bc — вычисляет каждую отдельную строку потока и записывает вместо неё результат вычисления
  • hexdump — показывает шестнадцатеричное представление данных, поступающих на стандартный поток ввода
  • strings — выделяет и показывает в стандартном потоке (или файле) то, что напоминает строки. Всё что не похоже на строковые последовательности, игнорируется. Команда полезна в сочетании с grep для поиска интересующих строковых последовательностей в бинарных файлах
  • sed — обрабатывает текст в соответствии с заданным скриптом. Наиболее часто используется для замены текста в потоке: sed s/было/стало/g
  • awk — обрабатывает текст в соответствии с заданным скриптом. Как правило, используется для обработки текстовых таблиц, например, вывод ps aux и тд
  • sh -s — текст, который передаётся на стандартный поток ввода sh -s. может интерпретироваться как последовательность команд shell. На выход передается результат их исполнения
  • ssh — средство удаленного доступа ssh, может работать как фильтр, который подхватывает данные, переданные ему на стандартный поток ввода, затем передает их на удаленный хост и подаёт на вход процессу программы, имя которой было передано ему в качестве аргумента. Результат выполнения программы (то есть то, что она выдала на стандартный поток вывода) передается со стандартного вывода ssh

Если в качестве аргумента передаётся файл, команда-фильтр считывает данные из этого файла, а не со стандартного потока ввода (есть исключения, например, команда tr, обрабатывающая данные, поступающие исключительно через стандартный поток ввода).

Пример

Команда tee, как правило, используется для просмотра выводимого содержимого при одновременном сохранении его в файл.

wc ~/stream | tee file2

Пример

Допускается перенаправление нескольких потоков в один файл:

ls -z >> file3 2>&1

В результате сообщение о неверной опции «z» в команде ls будет записано в файл t2, поскольку stderr перенаправлен в файл.

Для просмотра содержимого файла file3 введите команду cat:

cat file3

В результате на дисплее терминала отобразиться следующее:

ls: invalid option — ‘z’Try ‘ls —help’ for more information.

Заключение

Мы рассмотрели возможности работы с перенаправлениями потоков >, >> и |, использование которых позволяет лучше работать с bash скриптами.

Подробнее с этой темой можно ознакомиться по ссылкам Стандартные потоки ввода/вывода, Перенаправление стандартных потоков ввода/вывода, Перенаправление потоков ввода/вывода.

tglnkLinux

Если еще заявление

В синтаксисе if-else мы можем предоставить список действий, которые должны быть выполнены, когда условие становится ложным.

Синтаксис оператора if-else следующий:

Синтаксис

if (condition) action-1 else action-2

В приведенном выше синтаксисе действие-1 выполняется, когда условие оценивается как истинное, а действие-2 выполняется, когда условие оценивается как ложное. Например, следующий пример проверяет, является ли число четным или нет —

пример

[jerry]$ awk 'BEGIN { num = 11; if (num % 2 == 0) printf "%d is even number.\n", num; else printf "%d is odd number.\n", num }'

Выполнив этот код, вы получите следующий результат —

Выход

11 is odd number.

Читайте также:  Новая версия! Apple выпустила iOS 13.4.5 beta 1 для разработчиков