Материалы по UNIX |
|||||||||||||||||||||||||||||||
Работая в UNIX, необходимо помнить о различии формата текстовых файлов
между UNIX и Windows. В Windows признаком конца строки служит пара
байтов с шестнадцатиричными кодами 0D и 0A, идущих друг за другом. В
UNIX эту роль выполняет один байт 0A. В результате программы UNIX воспринимают
символ 0D (так называемый "carriage return" "возврат каретки") как обычный
символ, что приводит к особенно неприятным последствиям в скриптах. К счастью,
редактор Far manager'а может сохранить ваш текстовый файл в любом формате,
для чего служит функция "сохранить как": <Shift+F2>.
Поток stdin по-русски называется "стандартный поток ввода" и по умолчанию содержит то, что вы набираете на клавиатуре во время работы программы (например, в ответ на вопросы программы). Потоки stdout и stderr это, соответственно,
стандартный поток вывода и стандартный поток ошибок, и по умолчанию
их содержание отображается в консольном окне. То есть, хотя это два
разных потока, различить их при обычной работе программы нельзя.
Однако можно перенаправить stdout на stdin другой
программы или в файл (см. следующий раздел),
при этом stderr будет продолжать выводиться на экран.
ls > cur_dir.txtприведет к тому, что список файлов текущей директории окажется в файле cur_dir.txt При этом, если файл с таким именем уже существовал, то его старое содержимое исчезнет. Чтобы дописать stdout команды в конец уже существующего файла, используется
сочетание символов cat file2.txt >> file1.txtприведет к тому, что в файле file1.txt после его старого содержимого окажется еще и содержимое файла file2.txt (что делает команда cat, тем самым нетрудно догадаться). Чтобы записать в файл stderr команды, в bash можно применить сочетание символов 2>, например: entret -help 2> entret.help(entret, как и другие программы пакета EMBOSS, выдаёт свой help на stderr). В tcsh сочетание 2> не действует, зато сочетание >& направляет в файл и stdout, и stderr. Для направления stdout одной команды на вход (stdin) другой команды используется "pipe" (конвейер), задаваемый знаком | , например: ls -l | moreпозволяет просмотреть программой more информацию о файлах в текущей директории. К сожалению, в bash нет простого способа направить в конвейер stderr, равно как и добавить stderr в конец существующего файла. Если такое очень нужно, придется поменять интерпретатор, выполнив команду tcshа затем использовать сочетания Спецсимволы bashРяд символов вопринимается интерпретатором командной строки bash не буквально, а как указания произвести некоторые операции. Это следующие символы:
Пробел и символ табуляции отделяют параметры друг от друга. Кавычки и обратная косая черта
используются для передаче программам параметров, содержащих
спецсимволы (например, имен файлов с пробелами).
Звездочка *, вопросительный знак ? и квадратные скобки [ ] используются для "масок" имен файлов. Например [0-9]* превращается bash-ем в список всех файлов текущей директории, чье название начинается с цифры. Символы >, < и | предназначены для работы со стандартными потоками (см. выше). Символ ! можно использовать для вызова команды из журнала команд (просмотреть журнал можно, выполнив команду history). Пользуясь символом ; (точка с запятой) можно исполнить одной строкой
последовательность из двух или более команд
этот символ разделяет строку на последовательно выполняемые команды.
grep Identity some.needleто на экране появится строка файла some.needle, содержащая информацию о проценте совпадений. Выдача идет в stdout, поэтому её легко перенаправить в файл или просмотреть программой more. Важная особенность программы grep состоит в том, что если файл не указан, то grep берет данные для поиска строчек из stdin. Например можно написать такой конвейер: infoseq "sw:*_bacsu" | grep flagellarПрограмма infoseq соберет информацию о записях SwissProt, чье ID кончается на "_bacsu" и выдаст ее на stdout, после этого программа grep отберет из выдачи те строки, которые содержат слово "flagellar". В результате на экране появятся только эти отобранные строки. Можно, разумеется, устраивать и цепочки grep'ов, перенаправляя вывод одного grep'а на вход другого. Задавать слово для поиска можно не только однозначным образом. Команда grep понимает некоторые спецсимволы, самые употребительные из которых: ^, $, . (точка), *, [ и ], а также \. точка ставится вместо любого символа, например grep t..p filenameвытащит из файла filename все строки, в которых встретились буквы t и p с двумя любыми символами между ними; в квадратные скобки ставится набор символов, которые могут стоять на данном месте, например: grep tr[iy]psin filenameвыдаст все строки из filename, содержащие слова tripsin или trypsin. grep 'number [0-9]' filenameвыдаст все строки из filename, содержащие сочетания "number 1", "number 2" и т.д. Кавычки в примере стоят, чтобы bash не воспринял "number" и "[0-9]" как отдельные параметры. шапочка ^ и доллар $ означают соответственно начало и конец строки. Например, grep '^>' filenameвыдаст все строки из filename, начинающиеся с символа > звёздочка * означает, что предыдущий символ может быть повторен сколько угодно раз. Например grep 'number [0-9]* ' filenameвыдаст строки с сочетаниями "number 1087 ", "number 99 " и т.п. наконец, \ используется для того, чтобы последующий символ воспринимался программой буквально, например grep '\.ru' filenameнайдет строки, содержащие ".ru" (а не (любой символ)ru, как если бы \ перед точкой не стоял). Многие спецсимволы grep являются также спецсимволами bash, поэтому (а также, например, для поиска слов, содержащих пробелы) первый параметр программы лучше всегда брать в одинарные кавычки. Программа grep имеет две важные опции, а именно -v и -c.
Опция -v означает, что нужно выдать не строки, содержащие указанное
слово, а наоборот, строки его не содержащие. Опция -c означает,
что надо выдать лишь число таких строк, а не сами строки.
|