Студопедия
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция
|
Команды для работы с данными
Лабораторная работа №13
СОЗДАНИЕ И ВЫПОЛНЕНИЕ КОМАНДНЫХ ФАЙЛОВ
В СРЕДЕ ОС UNIX
Цель работы
Целью работы является изучение методов создания и выполнения командных файлов на языке Shell - интерпретатора.
Теоретическая часть
В предыдущих лабораторных работах взаимодействие с командным интерпретатором Shell осуществлялось с помощью командной строки. Однако, Shell является также и языком программирования, который применяется для написания командных файлов (shell - файлов). Командные файлы также называются скриптами и сценариями. Shell - файл содержит одну или несколько выполняемых команд (процедур), а имя файла в этом случае используется как имя команды.
Простой пример shell-файла
Для создания сценариев можно использовать любой текстовый редактор. Создайте новый файл и введите следующие строки.
#!/bin/bash echo "It is my first shell-file!!!"
# комментарий
ls $HOME
echo "Done!"
Первая строка указывает текущей оболочке, какую программу следует использовать для интерпретации файла. В данном случае это оболочка bash. Это сделано для того, что если сценарий вызывается в пределах другой оболочки или файлового менеджера - они будут "знать", что для выполнения этого сценария требуется оболочка bash.
Вторая строка - это первая команда в сценарии. Команда echo используется для вывода на экран простой информационной строки.
Третья строка - комментарий.
Далее следуют ещё две команды - команда ls, которая берёт имя каталога в качестве параметра, и, наконец, команда echo, выводящая на экран информацию об успешном выполнении работы.
Переменные командного интерпретатора
Как любой язык программирования, командный язык shell поддерживает переменные. Тип их — строковый. Для обозначения переменных Shell используется последовательность букв, цифр и символов подчеркивания; переменные не могут начинаться с цифры.
Оператор присваивания выглядит так:
$имя_переменной=значение
Имя должно начинаться с буквы и может состоять из латинских букв, цифр, знака подчеркивания. Если значение переменной содержит специальные символы, в имени файла, то при указании его имени в команде этот символ нужно экранировать знаком «\» (обратный слэш) или заключать все имя в двойные кавычки.
Вот ряд символов, которые имеют специальное значение для командного интерпретатора, и их использование не рекомендуется:
~ ! @ # $ & % * ( ) [ ] { } ' " \ : ; > < пробел
Внимание!!! Обратите внимание, что переменные в shell чувствительны к регистру. Например, Myvar и myvar – это имена разных переменных.
Позиционные переменные.
Переменные вида $n, где n - целое число, используются для идентификации позиций элементов в командной строке с помощью номеров, начиная с нуля. Например, в командной строке
саt text_1 text_2...text_9
аргументы идентифицируются параметрами $1...$9. Для имени команды всегда используется S0. В данном случае $0 - это саt, $1 - text_1, $2 - text_2 и т.д. Для присваивания значений позиционным переменным используется команда set, например:
Set arg_1 arg_2... arg_9
здесь $1 присваивается значение аргумента arg_1, $2 - arg_2 и т.д.
Вывод переменных.
Операция подстановки значения переменной обозначается символом $. Вывести значение переменной можно командой echo:
$ var=”Это моя переменная!”
$ echo var # выводит имя переменной var
$ echo $var # выводит значение переменной “Это моя переменная!”
Ставя перед именем переменной знак $, мы сообщаем интерпретатору, что нужно заменить ее значением. Это называется подстановкой переменной. Но что будет, если мы попробуем сделать так:
$echo foo$var #программа выведет “foo”
Мы хотели вывести на экран надпись 'fooЭто моя переменная!', но ничего не получилось. Что же произошло? Интерпретатор не смог определить значение какой именно переменной нужно подставить ($v, $va, $var и т.д.) В таких неоднозначных случаях можно явно указать на имя переменной:
$echo foo${var}
Для получения информации обо всех аргументах (включая последний) используют метасимвол *. Пример:
echo $*
Внимание!!! Для вывода переменных можно использовать команду printf:
PI=3,14159265358979
printf "Число пи с точностью до 2 знака после запятой = %1.2f" $PIprintf "Число пи с точностью до 9 знака после запятой = %1.9f" $PI
Арифметические операции
Команда expr (express -- выражать) вычисляет выражение expression и записывает результат в стандартный вывод. Элементы выражения разделяются пробелами; символы, имеющие специальный смысл в командном языке, нужно экранировать. Строки, содержащие специальные символы, заключают в апострофы. Используя команду expr, можно выполнять сложение, вычитание, умножение, деление, взятие остатка, сопоставление символов и т. д.
Пример. Сложение, вычитание:
b=190
a=` expr 200 - $b`
где ` - обратная кавычка (левая верхняя клавиша). Умножение *, деление /, взятие остатка %:
d=` expr $a + 125 "*" 10`
c=` expr $d % 13`
Здесь знак умножения заключается в двойные кавычки, чтобы интерпретатор не воспринимал его как метасимвол. Во второй строке переменной с присваивается значение остатка от деления переменной d на 13.
Сопоставление символов с указанием числа совпадающих символов:
concur=` expr "abcdefgh" : "abcde"`
echo $concur
Ответ 5.
Операция сопоставления обозначается двоеточием (:). Результат - переменная соncur.
Подсчет числа символов в цепочках символов. Операция выполняется с использованием функции length в команде expr:
chain="The program is written in Assembler"
str=` expr length "$chain"`
Echo $str
ответ 35. Здесь результат подсчета обозначен переменной str.
Внимание!!! Возможно использование следующей формы записи:
echo "Мне $[2000-1957] лет."
Логические выражения и операторы управления
Условия, связанные с файлами.
-b файл
| Файл существует и является блочным специальным
| -c файл
| Файл существует и является символьным специальным
| -d файл
| Файл существует и является каталогом
| -e файл
| Файл существует
| -f файл
| Файл существует и является обычным файлом
| -h файл
| Файл существует и является символической связью
| -r файл
| Файл существует и доступен текущему пользователю для чтения
| -s файл
| Файл существует и имеет ненулевой размер
| -t хэндл
| Хэндл открыт и соответствует терминалу
| -w файл
| Файл существует и доступен текущему пользователю для записи
| -x файл
| Файл существует и доступен текущему пользователю для выполнения
| -O файл
| Файл существует и принадлежит текущему пользователю
| -G файл
| Файл существует и принадлежит группе текущего пользователя
| -N файл
| Файл существует и был изменен после последнего чтения
| файл1 –nt файл2
| Файл 1 новее (т.е. был изменен позднее), чем файл 2
| файл1 –ot файл2
| Файл 1 старее (т.е. был изменен раньше), чем файл 2
| файл1 –ef файл2
| Оба имени ссылаются на один и тот же файл (как жесткие ссылки)
|
Условия, связанные со строками.
-z строка
| Строка пуста (имеет нулевую длину)
| -n строка
| Строка непустая
| строка
| Строка непустая
| строка1 = строка2
| Строки равны
| строка1 == строка2
| Строки равны
| строка1 != строка2
| Строки не равны
| строка1 < строка2
| Строка 1 меньше (в словарном смысле), чем строка 2
| строка1 > строка2
| Строка 1 больше (в словарном смысле), чем строка 2
|
Условия, связанные с числами.
число1 ОП число2
| Операция сравнения ОП может быть любой из следующих:-eq (равно),
-ne (не равно),
-lt (меньше),
-le (меньше либо равно),
-gt (больше),
-ge (больше либо равно).
|
Логические связки
! выражение
| Инверсия (логическое отрицание)
| выраж1 -a выраж2
| Конъюнкция (логическое И)
| выраж1 -o выраж2
| Дизъюнкция (логическое ИЛИ)
|
Встроенные функции.
Встроенные команды являются частью интерпретатора и не требуют для своего выполнения проведения последовательного поиска файла команды и создания новых процессов.
Функция
| Описание
| cd
| Команда изменяет текущий каталог.
| pwd
| Выводит название текущего рабочего каталога
| eval
| Конструирование команды на лету, из указанных аргументов, и отправка ее на выполнение.
| SECONDS
| Содержит время работы скрипта в секундах
| USER
| Содержит имя пользователя
| UID
| Числовой идентификатор текущего пользователя
| read
| «Читает» значение введенной переменной.
…
read var1 # Обратите внимание -- перед именем переменной отсутствует символ '$'echo "var1 = $var1" …
Команда read имеет ряд очень любопытных опций, которые позволяют выводить подсказку - приглашение ко вводу (prompt), и даже читать данные не дожидаясь нажатия на клавишу ENTER.
-s -- подавляет эхо-вывод, т.е. ввод с клавиатуры не отображается на экране. -n N -- ввод завершается автоматически, сразу же после ввода N-го символа. -p -- задает вид строки подсказки - приглашения к вводу (prompt).
| set
| Команда изменяет значения внутренних переменных сценария.
| unset
| Команда удаляет переменную, фактически -- устанавливает ее значение в null.
| export
| Команда экспортирует переменную, делая ее доступной дочерним процессам.
| declare, typeset
| Команды declare и typeset задают и/или накладывают ограничения на переменные.
declare -r -- делает переменную доступной только для чтения (аналог const в С)
| Exit
| Безусловное завершение работы сценария. Команде можно передать целое число, которое будет возвращено вызывающему процессу как код завершения. Вообще, считается хорошей практикой завершать работу сценария, за исключением простейших случаев, командой exit 0, чтобы проинформировать родительский процесс об успешном завершении.
| exec
| Это встроенная команда интерпретатора shell, заменяет текущий процесс новым процессом, запускаемым командой exec. Обычно, когда командный интерпретатор встречает эту команду, то он порождает дочерний процесс, чтобы исполнить команду. При использовании встроенной команды exec, оболочка не порождает еще один процесс, а заменяет текущий процесс другим. Для сценария это означает его завершение сразу после исполнения команды exec. По этой причине, если вам встретится exec в сценарии, то, скорее всего это будет последняя команда в сценарии.
| wait
| Останавливает работу сценария до тех пор пока не будут завершены все фоновые задания или пока не будет завершено задание/процесс с указанным номером задания. Возвращает код завершения указанного задания/процесса. Вы можете использовать команду wait для предотвращения преждевременного завершения сценария до того, как завершит работу фоновое задание.
| kill
| Принудительное завершение процесса путем передачи ему соответствующего сигнала.
kill $$ # Сценарий завершает себя сам. | sh <filename.sh>
| Вызов файла filename.sh
| trap [cmd] [cond]
| Перехват сигналов прерывания, где: cmd - выполняемая команда; cond=0 или EXIT - в этом случае команда cmd выполняется при завершении интерпретатора; cond=ERR - команда cmd выполняется при обнаружении ошибки; cond - символьное или
числовое обозначение сигнала, в этом случае команда cmd выполняется при приходе этого сигнала;
| umask [ -o | -s] [nnn]
| Устанавливает маску создания файла (маску режимов доступа создаваемого файла, равную восьмеричному числу nnn: 3 восьмеричных цифры для пользователя, группы и других). Если аргумент nnn отсутствует, то команда сообщает текущее значение маски. При наличии флага -o маска выводится в восьмеричном виде, при наличии флага -s - в символьном представлении;
| ls[ключи] параметры
| Для каждого параметра-каталога выдает информацию о файлах этого каталога. Для параметра-файла выдает информацию о данном файле. Если параметров нет, выдает информацию о текущем каталоге. Ключи:
-l - Подробный формат, по одному файлу в строке. Указываются: тип файла, права доступа для владельца, группы-владельца и прочих пользователей, количество жестких связей, владелец, группа-владелец, размер в байтах, дата и время последнего изменения, имя.
-a - Включаются данные об элементах каталога . и ..
-i - Включается номер индексного дескриптора (inode).
-d - Для каталога выводятся данные о самом каталоге, а не о его содержимом.
-t - Сортировка по времени последнего изменения файла.
-u - Сортировка по времени последнего обращения к файлу.
-c - Сортировка по времени создания файла.
-r - Обратный порядок сортировки
| who
| Выводит список пользователей, работающих в данный момент в системе (в пределах домена локальной сети). Для каждого пользователя выводится одна строка, включающая его имя входа, имя терминала, время входа в систему и имя компьютера.
| history [-c] [число]
| Выдает «список истории», содержащий последние введенные команды (по умолчанию – до 500 строк). С ключом -c очищает список истории. С аргументом – положительным числом N выдает только последние N строк истории.
| hostname [ключи]
| Выдает на стандартный вывод имя данного компьютера. Чтобы получить полное интернетовское имя (Fully Qualified Domain Name), надо указать ключ –-fqdn.
| times
| Выдает суммарное процессорное время, затраченное в режиме ядра и в режиме задачи данным шеллом и всеми процессами, запускавшимися из шелла.
| ps[ключи]
| Выдает информацию о процессах, выполняющихся в системе. По умолчанию выдает информацию только о процессах, запущенных с данного терминала, причем для каждого процесса выдаются 4 поля данных: идентификатор процесса (PID), имя терминала (TTY), затраченное процессорное время (TIME), имя выполняемой команды (CMD). Если процесс не прикреплен ни к какому терминалу, вместо имени терминала выдается знак ?.
При вызове с ключом -f дополнительно выдаются идентификатор пользователя (UID), идентификатор процесса-родителя (PPID), приоритет (C), время запуска (STIME), а для выполняемой команды указываются полное имя и параметры. При использовании ключа -e перечисляются все процессы, в том числе запущенные системой или другими пользователями. Имеется еще очень много ключей, позволяющих изменить объем и формат выдаваемой информации о процессах.
| uname [ключи]
| Выводит строку информации о системе, согласно следующим ключам:
-s – Имя ОС
-n – Сетевое имя компьютера
-v – Версия ОС
-r – Номер выпуска ОС
-m – Тип компьютера
-a – Вся перечисленная выше информация
Отсутствие ключей эквивалентно заданию ключа –s.
| date [ключи] [новая_дата]
| Выдает системную дату и время либо устанавливает новые дату и время. Ключи позволяют изменить формат выдачи. Новая дата и время задаются в формате: ММДДЧЧмм[[СС]ГГ][.сс] (месяц, день, часы, минуты, столетие, год, секунды).
| cal [ключи] [месяц [год]]
| Выдает табель-календарь на указанный месяц. С ключом –y выдает календарь на весь год. При заданном ключе –m первым днем недели считается понедельник (по умолчанию неделя начинается с воскресенья).
| du [ключи] [список_имен]
| Выдает суммарные данные об использовании дискового пространства файлами, содержащимися в указанных каталогах и их подкаталогах. Некоторые ключи приведены в следующей таблице:
-a – Выдает данные не только о каталогах, но и о каждом файле
-b – Выдает объем дисковой памяти в байтах (по умолчанию выдается число блоков)
-c – Формирует общую сумму
-S – Не включает в размер каталога размеры его подкаталогов
-s – Для каждого параметра-каталога выдается только общая сумма, без подкаталогов.
| stat [список_имен]
| Выдает информацию о файле, содержащуюся в дескрипторе файла (inode). Формат выдачи ориентирован скорее на восприятие человеком, чем на дальнейшую обработку (информация выдается в несколько строк, с названиями полей).
| finger [ключи] [список_имен]
| Выдает доступную информацию о перечисленных в списке пользователях системы. Если список не задан, выдает информацию обо всех пользователях, работающих в системе в данный момент.
Если задан ключ –s, выдает минимальный набор информации в одной строке. Ключ –l задает подробный многострочный формат информации. Если ключи не заданы, то при заданном списке имен используется формат –l, а если список не задан, то формат –s.
| cd [путь] или chdir [путь]
| Устанавливает каталог по указанному пути в качестве текущего. Если путь не указан, использует «домашний» каталог пользователя, полное имя которого хранится в переменной HOME.
| cp файл1 файл2 или cp файлы каталог
| В первой форме – копирует параметр файл1 в файл2. Во второй форме – копирует один или несколько файлов в указанный каталог.
| ln [-s] новое_имя файл
| Без ключа – создает жесткую связь с файлом, т.е. дает существующему файлу дополнительное имя, в том же или в другом каталоге. Имя может содержать путь к каталогу. Счетчик связей файла увеличивается на 1. С ключом -s создает символическую связь, т.е. новый файл, содержащий полное имя существующего файла (аналог ярлыка Windows). Счетчик связей файла при этом не увеличивается.
| mv файл1 файл2 или mv список_файлов каталог
| В первой форме – переименовывает файл1 в файл2 (или перемещает в другой каталог). Во второй форме – перемещает один или несколько файлов в указанный каталог.
| rename старое_имя новое_имя
| Переименовывает файл или каталог.
| rm [ключи] файлы
| Удаляет указанные файлы, точнее – удаляет из каталогов имена и уменьшает на 1 счетчики связей файлов. Действительному удалению подлежат только файлы, для которых число связей стало равным 0 (т.е. удалены все имена файла).
Ключ -r позволяет удалять целые каталоги вместе с их содержимым. Ключ -i требует от системы задавать для каждого файла вопрос о необходимости его удаления.
| mkdir список_каталогов
| Создает один или несколько пустых каталогов с заданными именами. Каждый пустой каталог содержит, тем не менее, два имени: имя . описывает сам каталог, а имя .. описывает родительский каталог.
| chmod права список_файлов
| Позволяет изменить права доступа к заданным файлам (или каталогам).
Изменяемые права могут быть заданы двумя способами: либо в символьном виде, либо с помощью трех восьмеричных цифр. Символьное задание прав состоит из трех элементов: категория пользователей, для которой задаются права (u – владелец файла, g – группа-владелец, o – прочие пользователи, a – все пользователи), выполняемая операция (+ – добавить право, - – отменить право, = – присвоить только это право, отменив остальные права) и конкретное право (r – чтение, w – запись, x – выполнение). Можно указать несколько категорий пользователей и несколько операций с разными правами для одной категории. Можно также в одной команде задать разные права для разных категорий пользователей, разделив их запятыми. Например, запись ug+r-w,o=x означает: «Для владельца и группы разрешить чтение и запретить запись (право на выполнение не менять), для остальных пользователей разрешить выполнение, запретить чтение и запись».
Второй способ задания прав предполагает явное задание всех прав в виде восьмеричного числа из трех цифр. Первая цифра задает три бита прав для владельца, вторая цифра – для группы, третья – для прочих. Например, число 751 означает набор прав, который команда ls -l отобразила бы в виде rwxr-x--x, т.е. все права для владельца, чтение и выполнение для группы, только выполнение для прочих.
| find список_каталогов [ключи]
| Служит для поиска файлов с известным именем и/или другими атрибутами в дереве файловой системы.
Заданный каталог или несколько каталогов определяют части файловой системы, в которых ведется поиск. Выполняется просмотр подкаталогов всех уровней, начиная с заданного каталога. Ключи определяют условия поиска файлов и действия с найденными файлами. Некоторые ключи приведены в таблице. Если задано более одного условия, проверяется истинность всех (конъюнкция). В отличие от большинства других команд, ключи задаются не одной буквой, а целым словом.
| name имя_файла
| Истина, если имя файла (без пути) совпадает с заданным.
| perm 8-ричное_число
| Истина, если права доступа совпадают с заданными (см. chmod)
| atime число_дней
| Истина, если к файлу были обращения за последние дни.
| mtime число_дней
| Истина, если файл был изменен за последние дни.
| newer файл
| Истина, если файл «новее», чем указанный файл, т.е. был изменен позднее.
| type символ
| Истина для всех файлов указанного типа (f – обычный файл, d – каталог, b – блочное устройство, c – символьное устройство, p – именованный канал, s – символическая связь).
| group имя_группы
| Истина, если имя группы-владельца совпадает с заданным.
| print
| Не проверяет никаких условий, а лишь указывает, что нужно выдать на стандартный вывод полные имена найденных файлов.
| mkdir [ключи] каталог
| Создает каталог с указанным именем. Если ключи не заданы, то требуется, чтобы уже существовал родительский каталог. При заданном ключе –p команда может создать сразу несколько вложенных каталогов.
| rmdir [ключи] список_каталогов
| Удаляет перечисленные каталоги. Удаляемый каталог должен быть пустым. При заданном ключе –p команда будет также удалять родительские каталоги, если они становятся пусты.
Для удаления непустого каталога вместе с его файлами можно использовать команду rm -r.
| cat список_файлов
| Читает файлы-параметры и копирует их содержимое на стандартный вывод. Если параметры не заданы, просто передает стандартный ввод на стандартный вывод.
|
Команды для работы с данными
echo [ключи] параметры
Копирует свои параметры на стандартный вывод (но с учетом специальных символов, если они имеются). Если не задан ключ –n, то в конце выдачи добавляется перевод строки.
Если задан ключ –e, то в выдаваемой строке можно использовать обозначения некоторых «непечатных» символов с помощью знака \. В частности, \n означает перевод строки, \t – символ табуляции, \a – звонок, а \nnn, где nnn – от одной до трех восьмеричных цифр, или \xnnn (nnn – от одной до трех шестнадцатеричных цифр) означает соответствующий символ кода ASCII.
more [файл]
Простая, но полезная команда, которая выводит файл-параметр (или, в его отсутствие, стандартный ввод) порциями, умещающимися на экране. Для вывода следующей порции нужно нажать клавишу «пробел».
less [файл]
Более современная команда просмотра файла (имя команды явно пародирует more). Позволяет, в частности, перемещаться по файлу вперед и назад. Для выдачи сводки по командам перемещения следует ввести h, для выхода из просмотра нужно ввести q.
wc [ключи] [файлы]
Для каждого параметра-файла (или для стандартного ввода) выдается строка, содержащая, в зависимости от ключа, число строк в файле (ключ -l), число слов (ключ -w) или число символов (ключ -c). По умолчанию (без ключей) выдаются все три числа.
head [ключи] [файл]
Выдает указанное число первых строк файла-параметра или стандартного ввода. По умолчанию выдаются 10 строк. Ключ –n число указывает иное число строк. Ключ –c размер указывает, что вместо определенного числа строк следует выдать указанное число начальных байтов, при этом размер можно также указывать в килобайтах (для этого запись размера нужно завершить суффиксом k), в мегабайтах (суффикс m) или в стандартных блоках по 512 байт (суффикс b).
tail [ключи] [файл]
Выдает на стандартный вывод несколько последних строк файла-параметра или стандартного ввода. По умолчанию выдаются 10 строк. Ключи –n число и –c размер действуют так же, как для команды head. Если перед числом строк или байтов записан знак +, то соответствующее число указывает, сколько надо пропустить от начала файла, в противном случае – сколько нужно оставить в конце файла.
grep [ключи] образец [список_файлов]
Выполняет поиск заданной строки-образца в указанных файлах или в стандартном вводе. Если образец содержит пробелы, его следует заключить в кавычки. По умолчанию на стандартный вывод выдаются все строки, содержащие образец. Если проверяется несколько файлов, то перед выводимыми строками выдается имя файла.
При задании образца можно использовать регулярные выражения, задающие шаблон поиска строки. Синтаксис и семантика регулярных выражений напоминают использование подстановочных знаков при поиске в Microsoft Word. Основные символы, используемые при записи регулярных выражений, приведены в таблице.
.
| Любой символ.
| \w
| Любая буква или цифра.
| \W
| Любой символ, кроме букв и цифр
| [символы]
| Любой из перечисленных символов. Можно задавать диапазоны через знак - (например, [0-9] соответствует любой цифре).
| [^символы]
| Любой символ, кроме перечисленных. Например, [^A-Za-z] означает любой символ, кроме латинских букв.
| ^
| Начало строки.
| $
| Конец строки.
| выраж*
| Выражение присутствует ноль или более раз.
| выраж?
| Выражение присутствует ноль или один раз.
| выраж+
| Выражение присутствует один или более раз.
| выраж1выраж2
| Последовательное соединение строк, соответствующих выражениям выраж1 и выраж2.
| выраж1|выраж2
| Строка, соответствующая либо выраж1, либо выраж2.
| (…)
| Используются для группировки выражений
| \символ
| Экранирует специальный символ, т.е. делает его обычным.
|
Например, регулярное выражение '^A([0-9]+|[^0-9])B?' означает: «В начале строки должна стоять буква A, за которой может следовать либо одна или несколько цифр, либо ровно один символ, отличный от цифры. После этого должна следовать буква B». То же самое условие можно записать и проще: '^A.[0-9]*B?'.
Регулярные выражения рекомендуется заключать в апострофы, чтобы шелл не попытался интерпретировать некоторые знаки как свои специальные символы.
Команда grep может иметь ряд ключей, некоторые из них приведены в следующей таблице.
-c
| Выдается только число подходящих строк, а не сами строки.
| -n
| Перед каждой строкой выводится ее номер в файле.
| -i
| Игнорируется различие строчных и прописных букв.
| -h
| Отменяется выдача имен файлов.
| -v
| Выдаются только строки, которые НЕ содержат образца.
| -r
| Ищет во всех файлах указанного каталога и его подкаталогов.
|
Команда возвращает код завершения 0, если удалось хотя бы раз найти искомый образец (если задан ключ -v, то наоборот, если не удалось).
sort [ключи] [-k от_поля [, до_поля]] [список_файлов]
Команда сортирует строки указанных файлов или стандартного ввода и выводит результат (сортированный файл) на стандартный вывод. Если указано несколько файлов, они объединяются перед сортировкой.
Каждая строка рассматривается как набор полей, разделенных пробелами или символами табуляции. Параметр от_поля указывает, какое первое поле, считая от начала строки, следует учитывать при сравнении строк. Если параметр не задан, учитываются поля, начиная с первого. Параметр до_поля указывает, какое последнее поле должно участвовать в сравнении. Если параметр не задан, учитываются поля до конца строки.
Допускается указывать параметры от_поля и до_поля не в виде одного числа, а в виде пары чисел «m.n», где m – номер поля, а n – номер символа в поле. Как поля, так и символы в поле нумеруются начиная с 1.
Ключи команды определяют способ сортировки. По умолчанию строки сортируются по возрастанию, как в словаре. Некоторые ключи приведены в таблице.
-b
| Игнорируются пробелы и табуляции в начале строки.
| -f
| Игнорируется различие между прописными и строчными буквами.
| -n
| Поля рассматриваются как числа (возможно, со знаком и десятичной точкой) и сравниваются по числовому значению.
| -r
| Сортировка ведется по убыванию.
| -t символ
| Указанный символ рассматривается как разделитель полей (вместо пробела и табуляции).
| -o файл
| Результат записывается в указанный файл (вместо стандартного вывода).
| -u
| Из нескольких строк с одинаковыми значениями сравниваемых полей сохраняется только одна.
| cmp [-l |-s] файл1 файл2 [смещение1 [смещение2]]
Сравнивает данные в двух файлах. Если файлы идентичны, возвращает код завершения 0, если различаются – код 1, если произошла ошибка (например, файл не найден) – код, больший 1.
По умолчанию выдает номер байта и номер строки, в которых найдено первое различие. Нумерация начинается с 1. Если один файл совпадает с начальной частью другого, выдается сообщение о найденном конце файла. Если файлы идентичны, ничего не выдается.
Если задан ключ –l, то для каждого различия выдается номер байта и различающиеся значения. С ключом –s не выдается ничего (только код завершения).
Величины смещений указывают, сколько байт надо пропустить от начала каждого файла, прежде чем начать сравнение.
cut [ключи] [файлы]
Команда выделяет из указанных файлов или из стандартного ввода части строк, заданные либо номерами полей, либо номерами позиций в строке. Нумерация ведется с 1. Полем считается часть строки, ограниченная символами табуляции. Выделенные части строк выдаются на стандартный вывод.
Ключи команды приведены в таблице.
-c список_позиций
| Задает номера выделяемых позиций. Можно использовать запятые и дефисы, например, список «10,20-30,40» означает «символы в позиции 10, в позициях с 20 до 30 и в позиции 40». Можно задавать неполные диапазоны, например, -25 (от начала до позиции 25) или 12- (с позиции 12 до конца строки). Этот ключ несовместим с остальными ключами.
| -f список_полей
| Задает номера выделяемых полей. Можно использовать запятые и дефисы.
| -d символ
| Указанный символ рассматривается как разделитель полей (вместо табуляции).
| -s
| Пропускаются все строки, не содержащие разделителя полей. Действует только при заданном ключе -f.
|
Создание текстового файла
Простейший способ создать небольшой файл – использовать команду echo с перенаправлением стандартного вывода:
$ echo -e "Hello!\nHow are you?" > hello
Другой вариант – использовать команду cat, опять-таки с перенаправлением вывода. Текст файла можно задать как стандартный ввод, содержащийся в тексте команды (в режиме «документ здесь»):
$ cat > hello << _TEXT_
> Hello!
> How are you?
> _TEXT_
Здесь в качестве ограничителя текста можно использовать любое слово, не встречающееся в этом тексте.
Еще один вариант – команда с перенаправлением стандартного вывода, но без перенаправления стандартного ввода. После ввода команды «cat > hello» шелл будет принимать вводимые строки текста, пока пользователь не введет комбинацию Ctrl+D (конец файла).
Здесь не рассматривается такой наиболее обычный способ создания файлов, как использование текстовых редакторов, входящих в состав UNIX.
|