Поиск строк в файле по образцу (grep
Утилита grep осуществляет поиск по одному или нескольким файлам и печатает все строки, содержащие предъявленный образец текста, на стандартном выводе.
В простейшем случае образец задается постоянной строкой знаков. В общем же случае он задается регулярным выражением (grep – акроним от global regular expression printer).
Пример:
$ grep Henry имя–файла1 имя–файла2 имя–файла3
Softpeople: Henry Morgan 112
$
Ключ -v (invert) предписывает печать всех строк, кроме найденных, например:
$ grep –v "Henry Morgan" имя–файла
Bill Williams 100
Mary Clark 101
$
Двойные кавычки требуются для размещения в образце пробелов.
Регулярные выражения позволяют вести поиск типа: найти все слова из четырех букв, начинающиеся на d, или все слова, кончающиеся на able, и тому подобное. Рассмотрим примеры задания образцов посредством регулярных выражений.
Знаки ^ и $ помечают начало и конец строки соответственно:
«^Genesis» – найти все строки, начинающиеся словом Genesis;
«eschatus$» – найти все строки, кончающиеся словом eschatus;
«^Out in cold$» – найти все строки, равные образцу.
Точка помечает любую букву:
«d...» – найти все слова из четырех букв, начинающиеся с d;
«d...$» – то же в конце строки;
«d..\ .» – найти все слова из четырех букв, начинающиеся с d и оканчивающиеся точкой (знак \ – обратный слэш – отменяет специальное значение следующего символа).
Квадратные скобы задают возможные значения знака:
«^ [abcxyz]» – найти все строки, начинающиеся с букв a, b, c, x, y или z; «[^Dd][a–z][a–z][a–z]» – найти все слова из четырех букв, не начинающиеся с D или d, в которых последние три буквы – малые (от a до z).
|
|
Фигурные скобки задают количество повторений (замыкание) предыдущего знака:
«[^Dd][a–z]{3}» – то же самое, что и предыдущий пример;
«[a–z]{3,5}» – найти все слова, содержащие от 3 до 5 малых букв.
Частные случаи замыкания обозначаются специальным образом:
· для {0} – ноль и более раз;
· + для {1} – один и более раз;
· ? для {0,1} – ноль или один раз.
Например:
$ grep ".*" имя–файла – просто напечатает все строки файла.
Примеры использования регулярных выражений:
· уничтожить все пустые строки в файле: $ grep –v "^ $" file > newfile;
· уничтожить все строки, состоящие только из пробелов: $ grep –v "^ *$" file > newfile.
Создание командного файла
Командный файл (сценарий shell) состоит из отдельных команд; как правило, каждая команда начинается с новой строки. Создавать командный файл можно в тестовом редакторе, например vi.
Существует два способа вызова командного файла на выполнение:
1. $ имя_интерпретатора_команд имя_сценария;
Например:
bash comfile
2. $ chmod 755 имя_сценария (сделать файл имя_сценария выполнимым, т.е. –rwxr–xr–x)
$имя_сценария
Примечание. Если вы не указываете полный путь к файлу, то поиск исполняемого файла осуществляется в каталогах, список которых содержится в переменной PATH.
|
|
Значение переменной PATH можно получить с помощью команды
$ echo $PATH
Текущий каталог, как правило, не включен в путь поиска исполняемых файлов; поэтому, если вы создали файл сценария в текущем каталоге, нужно набирать полный путь к нему. Например, так:
~/command
ПРИЛОЖЕНИЕ 2
Команды архивирования файлов в ОС Linux
При работе с Linux вы, может быть, еще не скоро столкнетесь с необходимостью работать с большинством консольных команд, поскольку имеются такие оболочки, как Midnight Commander, или графические оболочки типа KDE,но с командами архивирования (точнее, разархивирования) вам работать придется обязательно, хотя бы потому, что вы будете часто встречать архивированные файлы в Интернете.
Основным средством архивирования в UNIX (а следовательно, и в Linux) является комплекс из двух программ – tar и gzip. Существует возможность использования arj, pkzip, lha, rar и т.д. – версии этих программ для Linux общедоступны. Исторически сложилось так, что пользователи Unix чаще применяют именно tar и gzip, и именно в таком формате распространяется большая часть программного обеспечения для Unix.
|
|
Программа tar
У тех, кто привык к архиваторам типа arj, которые собирают файлы в единый архив и сразу «сжимают» их, может возникнуть вопрос: «Зачем использовать две программы?» Дело в том, что tar расшифровывается как Tape ARchiver, он не сжимает данные, а лишь объединяет их в единый файл с последовательным доступом для последующей записи на ленту. По умолчанию этот архивный файл создается на ленточном накопителе, точнее, на устройстве /dev/rmt0. Если вы хотите создать архивный файл на диске, то необходимо использовать команду tar с опцией f, после которой указывается имя архивного файла.
У программы tar имеется 8 опций, отличающихся от остальных тем, что при вызове программы должна обязательно задаваться одна из этих опций. Эти опции определяют основные функции программы (табл. 2.1).
Таблица 2.1
Основные опции программы tar
Опция | Значение |
-A, --catenate, --concatenate | Добавляет файлы в существующий архив |
-c, --create | Создает новый архив |
-d, -diff, --compare | Найти различия между архивом и файловой системой |
--delete | Удалить из архива (не может использоваться с магнитной лентой!) |
-r, --append | Дописывает файлы в конец архива |
-t, --list | Выводит список файлов архива |
-u, --update | Добавляет только файлы, которые новее, чем имеющаяся в архиве копия |
-x, --extract, --get | Извлечь файлы из архива |
Если вы работаете с файлами архивов на дисках, а не с ленточным устройством, то, очевидно, обязательной будет и опция f. Другие опции не являются обязательными, они служат только для конкретизации задания программе. Например, опция v заставляет программу выводить список обрабатываемых файлов.
|
|
Однобуквенные опции программы tar могут перечисляться друг за другом (вы увидите это в приводимых ниже примерах).
Не будем давать здесь описание всех опций команды tar, просто приведем несколько командных строк для выполнения самых необходимых действий с архивами.
Для того чтобы создать один tar–архив из нескольких файлов, используется команда:
[user]$ tar -cf имя_архива файл1 файл2 ...,
где опция -c сообщает программе, что необходимо создать (create) архив, а опция f говорит о том, что архив должен создаваться в виде файла (имя которого должно следовать сразу за этой опцией).
В именах файлов, которые сохраняются в архиве, можно использовать шаблоны имен файлов, в том числе просто символы–заместители * и ?. Благодаря этому можно очень короткой командой отправить в архив сразу много файлов. Например, для того чтобы создать архив, содержащий все файлы одного из подкаталогов (пусть это будет sub_dir) текущего каталога, достаточно дать команду
[user]$ tar -cvf имя_архива ./sub_dir/*
или даже просто
[user]$ tar -cvf имя_архива sub_dir
По этой команде в архиве будут сохранены не только файлы, расположенные непосредственно в подкаталоге sub_dir, но и рекурсивно все файлы из подкаталогов каталога sub_dir. При этом в архиве сохраняется вся структура подкаталогов каталога sub_dir.
Заметим, что если в только что приведенном примере вместо * поставить *.*, то будут сохранены только те файлы, которые расположены непосредственно в подкаталоге sub_dir, а подкаталоги каталога sub_dir архивированы не будут. Если в том же примере не указать имя подкаталога, то будут архивироваться все файлы (и подкаталоги) текущего каталога. Но если вы дадите команду следующего вида:
[user]$ tar -cvf имя_архива ./.*
то в архиве будут сохранены не только все файлы (и подкаталоги) текущего каталога, но и файлы из родительского каталога.
Для того чтобы распаковать (извлечь) файлы из архива, нужно дать команду
[user]$ tar -xvf имя_архива файлы
Получить список файлов архива можно командой
[user]$ tar -tf имя_архива | less
Программа tar является удобным средством для создания резервных копий файлов. Конечно, существуют специальные утилиты резервного архивирования, но даже если вы о них еще не знаете, то, по меньшей мере, можете сделать следующее:
[user]$ tar -Mcvf /dev/fd0H1440 /каталог
Такая команда создаст на дискетах архив с содержимым каталога, разбивая его на тома. Монтировать дискеты перед запуском команды не нужно, программа просто пишет на устройство потоком (в данном случае на дискету по секторам). При этом никакой файловой системы на дискете не создается. После заполнения дискеты вам будет выдан запрос на смену дискеты. Прежде чем запускать такую команду на выполнение, приготовьте достаточное количество свободных дискет (помните, что tar не сжимает файлы), которые лучше всего соответствующим образом пометить и обязательно пронумеровать. Кроме того, имейте в виду, что вся информация на дискетах будет без предупреждения уничтожена.
Для того чтобы восстановить сохраненные данные, воспользуйтесь командой
[user]$ tar -Mxpvf /dev/fd0H1440
Если вы ошибетесь в порядке вставляемых дискет, программы сообщит вам об этом и попросит заменить том.
В заключение заметим, что всегда можно получить подсказку по использованию программы tar, дав команду
[user]$ tar -help
При этом если вы используете русифицированный дистрибутив Linux, то подсказка будет выдаваться по-русски.
Программа gzip
Хотя программа tar создает архивы, она, как было сказано, не сжимает архивы, а просто соединяет отдельные файлы в единый архивный файл. Для сжатия этого файла часто применяют команду gzip. В простейшем случае она вызывается в следующем формате:
[user]$ gzip файл
В командной строке можно указать сразу несколько имен файлов или шаблон имени файла. Но в этом случае каждый из указанных файлов будет заархивирован отдельно (общий архив не создается).
Для того чтобы распаковать архив, используйте команду
[user]$ gzip -d файл_архива
или
[user]$ gunzip файл_архива
Исходные файлы после сжатия удаляются, остается только архивный файл (файлы перемещаются в архив), а при разархивации удаляется архив.
Перечислим кратко другие полезные опции программы gzip (табл. 2.2).
Таблица 2.2
Основные опции программы gzip
Опция | Значение |
-h, --help | Вызов краткой помощи по использованию программы |
-l, --list | Выдает имя файла, содержащегося в архиве, его объем и степень сжатия |
-L, --license | Отображает номер версии и лицензию на программу |
-N, --name | Сохранять (или восстанавливать) исходное имя и время создания файла |
-n, --no–name | Не сохранять (не восстанавливать) исходное имя и время создания файла |
-q, --quiet | Подавляет выдачу на экран предупреждающих сообщений |
-r, --recursive | Рекурсивно обрабатывать подкаталоги (используется в случае. когда задан шаблон имен обрабатываемых файлов) |
Окончание табл. 2.2
Опция | Значение |
-S .suf, --suffix .suf | Добавить суффикс .suf к имени сжатого файла (вместо добавляемого по умолчанию суффикса gz; но учтите, что при разархивации файлов с суффиксами, отличными от gz, программа вас не поймет) |
-t, --test | Протестировать архивный файл |
-v, --verbose | Выдача дополнительных сообщений в процессе работы программы |
-V, --version | Отобразить версию программы |
-f, --fast | Быстрое сжатие |
-9, --best | Более высокая степень сжатия |
Поскольку программа gzip не умеет сохранять в одном архиве несколько файлов, то обычно ее применяют для сжатия архивов, созданных программой tar. Более того, среди опций программы tar имеется специальная опция - z, позволяющая сразу после создания архива сжать его с помощью программы gzip. Для выполнения такого сжатия надо использовать команду tar примерно следующим образом:
[user]$ tar -czf имя_архива шаблон_имен_файлов (или имя_каталога)
Только имейте в виду, что в этом случае суффикс .gz не добавляется автоматически к имени создаваемого архива, поэтому лучше сразу задать имя архива с указанием обеих суффиксов: имя.tar.gz.
Программа bzip2
В последнее время все чаще вместо программы gzip используется архиватор bzip2, который обеспечивает более высокую степень сжатия и работает несколько быстрее.
Работает bzip2 примерно так же, как команда gzip, т. е. замещает каждый файл, имя которого задано в командной строке, сжатой версией, добавляя к имени файла суффикс .bz2.
Сжатый файл имеет те же самые время модификации, права доступа и, по возможности, того же владельца, что и исходный файл, что дает возможность восстановить эти атрибуты при извлечении файлов из архива.
В некоторых случаях сжатый файл может оказаться даже больше по размеру, чем исходный. Это происходит, например, для файлов длиной менее 100 байт, потому что механизм сжатия использует заголовок длиной около 50 байт. Для файлов, представляющих собой случайную последовательность символов (в том числе для выходных файлов большинства файловых архиваторов) длина файла увеличивается примерно на 0,5 %.
Команда bunzip2 (или bzip2 -d) разархивирует указанные в командной строке файлы. Если эти файлы не были созданы программой bzip2, они не будут разархивироваться, будет выдано соответствующее предупреждение. При разархивации bzip2 пытается угадать имя разархивируемого файла по следующим правилам:
· filename.bz2 заменяется на filename;
· filename.bz заменяется на filename;
· filename.tbz2 заменяется на filename.tar;
· filename.tbz заменяется на filename.tar;
· любое другое "имя" заменяется на "имя.out".
Опции командной строки для bzip2 очень похожи на опции команды gzip, но все же они не идентичны. Приведем краткую сводку наиболее необходимых в работе опций (табл. 2.3).
Таблица 2.3
Основные опции программы bzip2
Опция | Значение |
-d, --decompress | Принудительная разархивация. Эта опция необходима в силу того, что bzip2, bunzip2 и bzcat— это на самом деле одна и та же программа, которая сама по расширению имени файла принимает решение о том, какое действие надо выполнить над указанным файлом. Опция -d отключает этот механизм и заставляет программу разархивировать указанные файлы |
-z, --compress | Принудительная архивация |
-t, --test | Проверка целостности указанного файла(ов) без разархивации |
-f, --force | Перезапись существующего файла. По умолчанию bzip2 не перезаписывает существующие файлы. Если вы хотите перезаписать существующий файл, надо задать опцию –f |
-k, --keep | Сохранять (не удалять) исходные файлы при архивации или разархивации |
-s, --small | Снизить требования к объему используемой оперативной памяти за счет снижения скорости архивации. Эту опцию рекомендуется применять на компьютерах с малым объемом ОЗУ (8 Мбайт и меньше) |
-q, --quiet | Не выводить малосущественные сообщения |
-v, --verbose | Выводить дополнительную информацию в процессе работе (представляет интерес в диагностических целях) |
Окончание табл. 2.3
Опция | Значение |
-L, --license, -V, --version | Отобразить версию программы и лицензионное соглашение |
Аргументы командной строки, которым предшествует двойное тире и пробел, трактуются как имена файлов, даже если они начинаются с тире. Например:
[user]$ bzip2 -- -myfilename
Приведенных данных достаточно для квалифицированного применения архиваторов tar, gzip и bzip2. За дополнительными сведениями обращайтесь к интерактивной подсказке man. По утилите bzip2 имеется «Bzip2–HOWTO», переведенный на русский язык.
Дата добавления: 2018-11-24; просмотров: 211; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!