Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
43
Добавлен:
07.06.2015
Размер:
326.14 Кб
Скачать
        1. Ввод из файла

Возможно, у вас возникнет и другой вопрос: как заставить программу считать данные из файла, как если бы их вводили с клавиатуры?

Ответ на этот вопрос такой. Практически все популярные программы, для которых это имеет смысл, сами умеют читать данные из файла. Узнайте, как использовать эту функцию в нужной вам программе и пользуйтесь ею.

Но если вы уверены, что такой функции нет, вы все же можете направить данные из файла в поток ввода программы:

команда < файл

Да, можно комбинировать перенаправление ввода и вывода:

команда < файл_для_ввода > файл_для_вывода

Еще раз повторим, что если программа сама умеет читать данные из файла, то лучше пусть читает сама. Это, скорее всего, более надежно и эффективно.

Оператор |

Особым вариантом перенаправления вывода является организация программного канала (конвейера). Для этого две или несколько команд, таких, что вывод предыдущей служит вводом для следующей, соединяются (или разделяются, если вам это больше нравится) символом вертикальной черты — "|". При этом стандартный выходной поток команды, расположенной слева от символа |, направляется на стандартный ввод программы, расположенной справа от символа |.

Надо отметить, что оболочка одновременно вызывает на выполнение все команды, включенные в конвейер, запуская для каждой из команд отдельный экземпляр оболочки, так что как только первая программа начинает что-либо выдавать в свой выходной поток, следующая команда начинает его обрабатывать. Точно так же каждая следующая команда выполняет свою операцию, ожидая данных от предыдущей команды и выдавая свои результаты на вход последующей. Если вы хотите, чтобы какая-то команда полностью завершилась до начала выполнения последующей, вы можете использовать в одной строке как символ конвейера |, так и точку с запятой ;. Перед каждой точкой с запятой оболочка будет останавливаться и ожидать, пока завершится выполнение всех предыдущих команд, включенных в конвейер.

Фильтры

Фильтры — это команды (или программы), которые воспринимают входной поток данных, производят над ним некоторые преобразования и выдают результат на стандартный вывод (откуда его можно перенаправить куда-то еще по желанию пользователя). К числу команд-фильтров относятся команды cat, more, less, wc, cmp, diff, а также следующие команды.

Таблица 5.1. Команды-фильтры

Команда

Краткое описание

grep, fgrep, egrep

Ищут во входном файле или данных со стандартного ввода строки, содержащие указанный шаблон, и выдают их на стандартный вывод

tr

Заменяет во входном потоке все встречающиеся символы, перечисленные в заданном перечне, на соответствующие символы из второго заданного перечня

comm

Сравнивает два файла по строкам и выдает на стандартный вывод 3 колонки: в одной — строки, которые встречаются только в 1 файле, во второй — строки, которые встречаются только во 2-ом файле: и в третьей — строки, имеющиеся в обоих файлах

pr

Форматирует для печати текстовый файл или содержимое стандартного ввода

sed

Строковый редактор, использующийся для выполнения некоторых преобразований над входным потоком данных (берется из файла или со стандартного ввода)

Особым фильтром является команда tee, которая "раздваивает" входной поток, с одной стороны направляя его на стандартный вывод, а с другой — в файл (имя которого вы должны задать). Легко видеть, что по своему действию команда tee аналогична оператору перенаправления 1>&file.

Возможности фильтров можно существенно расширить за счет использования регулярных выражений, позволяющих организовать, например, поиск по различным, зачастую очень сложным, шаблонам.

Шаблоны файлов

Метасимвол * осуществляет поиск любой строки символов, включая нулевую (пустую) строку. Вы можете использовать * для обозначения полного или частичного имени файла. Просто символ * ищет все имена файлов и справочников в текущем каталоге, за исключением тех, которые начинаются с точки.

Метасимвол ? осуществляет поиск любого одного символа в имени файла за исключением лидирующей точки. Предположим, вы имеете книгу, в которой 12 глав и хотите получить список глав до 9-ой главы. Если ваш каталог содержит следующие файлы: Chapter1, Chapter2, Chapter5, Chapter9, Chapter11, то введите команду ls с метасимволом ? для получения всех глав, которые начинаются со строки "Chapter" и заканчиваются одним символом:

$ ls Chapter?

Если вы хотите, чтобы shell нашел любой символ из перечисленных вами символов, то заключите эти символы в квадратные скобки. Предположим, ваш каталог содержит следующие файлы: cat, fat, mat, rat. Если вы воспользуетесь в качестве части имени файла шаблоном [crf], то shell будет искать имена файлов, в которые входят либо буква ``c'', либо буква ``r'', либо буква ``f'' в указанной позиции.

Скобки могут также использоваться для обозначения диапазона символов, цифр или букв. Предположим в вашем каталоге содержатся следующие файлы: chapter1, chapter2, chapter3, chapter4, chapter5, chapter6. Если вы укажете chapter[1-5], то shell найдет файлы с chapter1 по chapter5. Класс символов можно также указать с помощью диапазона букв. Если вы укажете [A-Z], то shell будет искать только большие буквы, если [a-z] - то малые буквы.

Запуск команды в фоновом режиме (символ &)

    1. После того, как вы ввели команду в Терминал, вам обычно нужно дождаться завершения ее работы, прежде чем shell вернет вам управление. Это значит, что вы запустили команду в приоритетном режиме. Однако, бывают случаи, когда это нежелательно. Допустим, что вы решили рекурсивно скопировать один большой каталог в другой. Выполнение такой команды может занять несколько минут пока она не выполнится полностью. У вас есть два варианта решения: первый - жестокий, подразумевающий остановку (убивание) команды, а затем повторное ее выполнение, но уже в более подходящее время. Второй - запуск процесса в фоновом режиме. Копирование файлов будет выполняться, но Вы сможете продолжать работу с Терминалом.

Общий формат для запуска команд в фоновом режиме следующий:

command &

Соседние файлы в папке 2курсИБ(ОС)