Читайте также: |
|
С помощью данной команды вы можете удалить файлы, имена котоpых указаны в качестве паpаметpов. Если файл защищен от записи и стандартным устройством ввода данных является терминал, пользователю будет выдан запpос на подтвеpждение удаления файла.
Пpи попытке удаления каталога с помощью этой команды будет выдано сообщение об ошибке.
Вы можете использовать следующие опции:
-d
Если удаляемый файл окажется каталогом, то также его удалить.
-f
Удалить защищенный от записи файл без подтвеpждения. Если данный файл не существует, то не выводить сообщение об его отсутствии. Опция -f отменяет предыдущую опцию -i.
-i
Запpашивать подтверждение на удаление любого файла, независимо от того, является ли теpминал стандаpтным устpойством ввода или нет. Опция -i отменяет предыдущую опцию -f.
-r
Удалить все файлы и подкаталоги данного каталога, а после этого удалить и сам каталог. Опция -R подразумевает опцию -d. Если также указана опция -i, то пользователю выдается запpос на подтвеpжение удаления файлов и каталогов.
Cp
Программа копирует содержимое файла в файл с другим именем либо в другой каталог с сохранением существующего имени файла, также применяется для копирования каталогов с их содержимым. Программа имеет следующий формат:
cp [-ipr] имя_файла... имя_файла_назначения
Вы можете использовать следующие опции:
-i
Пользователю выдается запpос на подтвеpжение при перезаписи существующих файлов и каталогов.
-p
Сохранять существующий режим доступа к файлу.
-r
Копирование каталога с его подкаталогами.
Копирование файла в текущий каталог с новым именем:
[user@localhost ~]$ cp /etc/resolv.conf resolv
Копирование файла в текущий каталог с сохранением имени:
[user@localhost ~]$ cp /var/log/apache/access_log.
Копирование каталога:
[user@localhost ~]$ cp -r test test.old
Mv
Переименование файла или перемещение одного либо нескольких файлов (или каталогов) в другой каталог. Формат команды:
Mv [-i | -f] имя_файла... имя_файла_назначения
При переносе в рамках одной файловой системы команда только меняет путевое имя файла, поэтому переименование и перенос идентичны по реализации.
Вы можете использовать следующие опции:
-f
Запрет запроса подтверждений при перезаписи существующих файлов.
-i
Пользователю выдается запpос на подтвеpжение при перезаписи существующих файлов и каталогов.
Пример использования команды для переноса файла в каталог:
[user@localhost ~]$ mv text/user.html text/htmls/
Ln
Эта команда создаёт ссылки на файлы как жёсткие, так и символические. Она имеет следующий формат (аналогичный команде mv по порядку аргументов):
ln [-s] имя_файла имя_файла_ссылки
Вы можете использовать следующие опции:
-f
Запрет запроса подтверждений при перезаписи существующих файлов (ссылок).
-s
Создание символической ссылки.
Примеры использования команды:
[user@localhost ~]$ ln text/alex/linux.html working/linux-todo.html
Создание символической ссылки на каталог:
[user@localhost ~]$ ln -s images/my/photos photos
Du
Команда выводит размер пространства на диске, занятого каталогом (и всеми его подкаталогами), в блоках (по умолчанию, 1 блок составляет 512 байт). По умолчанию выводится информация о текущем каталоге.
Программа имеет следующие параметры:
-a
Выводить информацию не только о каталогах, но и о файлах.
-h
Вывод размера каталога в «человеческом» формате: килобайтах, мегабайтах и т.п..
-s
Вывод только общего итога, без отображения промежуточной информации.
Пример выполнения программы:
[user@localhost ~]$ du -sh test
925K test
tar
Команда tar предназначена для архивации груп файлов и каталогов. Эта команда позволяет объединять группу файлов и каталогов со всеми атрибутами в единый файл, который имеет расширение «.tar». Полученный файл затем с помощью той же команды tar. Команда tar имеет множество опций, мы же остановимся на следующем формате использования команды:
tar [-c | -x] [-z | -j] -f имя_tar_файла имена_файлов_и_каталогов
Опция -c соответствует созданию архива, -x — разворачивание архива.
Созданный архив можно также сжать с помощью архиваторов gzip или bzip2. Для этого применяются соответственно опции -z и -j. Здесь хорошо видна разница между понятием «архивирование», которое выполняет команда tar, и «сжатием», которе производят специализированные программы.
Имя архива, который создаётся или разворачивается передаётся после параметра -f.
Рассмотрим примеры работы с этой программой:
Создание архива etc.tar.bz2 каталога /etc с использованием сжатия bzip2:
[user@localhost ~]$ tar -cjf etc.tar.bz2 /etc
[user@localhost ~]$ ls
etc.tar.bz2
Разворачивание архива etc.tar.bz2 в текущий каталог с использованием разсжатия bzip2:
[user@localhost ~]$ tar -xjf etc.tar.bz2
[user@localhost ~]$ ls
etc etc.tar.bz2
Find
При работе с файлами часто бывает необходимо найти что-нибудь. В UNIX для этого существует команда find. В общем виде эта команда имеет следующий формат:
find [где_искать] [условие_поиска] [действие]
Первый аргумент команды find — это имя каталога, в которой производится поиск. По умолчанию, это текущий каталог.
Далее указываются условия поиска, которые могут принимать следующие значения:
-name
Имя файла. В нём можно использовать шаблоны, но при этом необходимо заключить имя в двойные кавычки.
-type
Тип файла: f — обычный файл, d — каталог, l — символическая ссылка и т.п..
-user
Имя владельца файла или его уникальный идентификатор (UID).
-group
Имя группы владельца файла или её уникальный идентификатор (GID).
-perm
Права доступа файла.
-size
Размер файла. Обычно за числом следует буква — в чём измеряется размер (в блоках, байтах, килобайтах и т.п.).
-atime
Время доступа к файлу.
-ctime
Время последнего изменения владельца файла.
-mtime
Время последнего изменения содержимого файла.
-newer
Поиск всех файлов новее указанного.
Условия поиска могут быть объединены с помощью модификаторов: -a — И, -o — ИЛИ, \! — НЕ, \(...\) — группа условий.
К найденым файлам могут применяться следующие действия:
Вывести на экран имя найденного файла вместе с путём. Это действие выполняется по умолчанию.
-delete
Удалить найденные файлы.
-exec команда {} \;
Исполнение указанной команды для каждого найденного файла с передачей имени файла в качестве артумента ({}).
-ok команда {} \;
Аналогична действию -exec, только для каждого файла запрашивается подьверждение перед выполнением команды.
Рассмотрим примеры использования команды:
Вывод всех файлов в текущем каталоге и подкаталогах:
[user@localhost ~]$ find
.
./xxx
./xxx/yyy
./xxx/yyy/zzz
./file.test
Вывод всех файлов в каталоге /etc, начинающихся на «re»:
[user@localhost ~]$ find /etc -name "re*"
find: /etc/tcb: Permission denied
find: /etc/default: Permission denied
/etc/chroot.d/resolv.all
/etc/chroot.d/resolv.conf
/etc/chroot.d/resolv.lib
/etc/redhat-release
/etc/remounttab
/etc/resolv.conf
...
Вывод всех подкаталогов в каталоге /etc, начинающихся на «re»:
[user@localhost test]$ find /etc -name "rp*" -type d
/etc/rpm
Вывод всех файлов в каталоге /etc, изменённых за последние сутки:
[user@localhost test]$ find /etc -mtime -1
/etc
/etc/issue
/etc/issue.net
/etc/mtab
Вывод всех файлов в каталоге /tmp, не принадлежащих пользователю user:
[user@localhost test]$ find /tmp \! -user user
/tmp
/tmp/.private
/tmp/.font-unix
/tmp/.X11-unix
Удаление в текущем каталоге всех устаревших файлов (оканчивающихся на «~»):
[user@localhost test]$ find -name "*~" -delete
Вывод на экран имён всех текстовых файлов в домашнем каталоге:
[user@localhost test]$ find ~ -name "*.txt" -exec echo {} \;
/home/user/a.txt
/home/user/unix_commands.txt
Копирование всех текстовых файлов на дискету:
[user@localhost test]$ find ~ -name "*.txt" -exec cp {} /mnt/floppy/ \;
Mkfifo
Команда используется для создания специальных файлов: именовыных каналов. С помощью этих каналов можно осуществлять взаимодействие между процессами операционной системы.
Для создания канала необходимо ввести команду mkfifo, аргументом которой является имя файла канала:
[user@localhost test]$ mkfifo pipe
Именованый канал аналогичен неименованному (который устанавливается с помощью символа «|») — процессы могут писать в него и читать из него. При этом с каналом оперируют как с файлом:
[user@localhost test]$ echo "Hello, world." > pipe
[user@localhost test]$ cat < pipe
Hello, world.
Каналы, в отличие от файлов, только передают, но не сохраняют информацию. Например, последующие чтение канала приведёт к приостановке просматривающего процесса: пока не поступят новые данные.
Команды по работе с текстом
В операционной системе UNIX большинство информации хранится в текстовом виде. Поэтому команды по обработке текстовой информации играют очень важную роль в этой операционной системе.
Echo
Познакомимся еще с одной командой, аналог котоpой имеется в DOS-си- темах. Это команда echo (эхо).
Она имеет фоpмат:
echo [-n] [arg...]
Команда echo выводит на устройство стандартного вывода заданные ей аргументы, разделяя их пробелами и завершая их символом новой строки (\n).
Эта команда удобна для формирования диагностических сообщений в командных файлах и для передачи известных данных в программном канале.
С помощью следующей команды можно довольно пpосто создать пустой файл: echo > имя_файла.
Возможен параметр -n — не выводить завеpшaющий символ перевода строки.
Интеpпpетатоp команд имеет встроенную команду echo, которая имеет синтаксические различия с внешней командой echo. Следует знать, что пользователям, работающим с оболочкой, будет доступна встроенная команда echo, если они не укажут /bin/echo.
Рассмотрим примеры использования этой команды:
Вывод сообщения «Hello, world» на экpан:
[user@localhost ~]$ echo "Hello, world."
Hello, world.
[user@localhost ~]$
Вывод сообщения без завеpшающего символа новой стpоки:
[user@localhost ~]$ echo -n "Hello, world."
Hello, world.[user@localhost test]$
Вывод сообщения в файл file1:
[user@localhost ~]$ echo "Hello, world." > file1
Добавление сообщения к содеpжимому файла file1:
[user@localhost ~]$ echo "Hello, world." >> file1
Вывод имен файлов текущего каталога в алфавитном поpядке:
[user@localhost ~]$ echo *
Вывод списка файлов с именами, соответствующих шаблону. Вывести имена файлов с pасшиpением.txt:
[user@localhost ~]$ echo *.txt
Cat
Рассмотpим еще одну команду, котоpая может быть полезна пpи pаботе с файлами. Это команда cat (аналог команды TYPE для DOS-систем).
Команда cat имеет следующий фоpмат:
cat [-benstuv] [-] [file1 [file2...]]
Она по очеpеди читает указанные, как аpгументы файлы и выводит их содеpжимое на стандаpтное устpойство вывода.
Поименованный файл или файлы выводятся последовательно один за дpу- гим без пpомежутков. Если файл достаточно длинный, то можно пpиостано- вить вывод с помощью комбинации клавиш Ctrl-S. Для пpодолжения вывода нажмите любую клавишу. Окончание ввода производится комбинацией Ctrl-D.
Операнды обрабатываются в порядке их pазмещения в командной строке. Если не указан ни один файл или указана опция (-), команда читает данные со стандаpтного устpойства ввода.
Вы можете использовать следующие опции:
-n
Нумеpовать стpоки начиная с 1.
-b
Подразумевает опцию -n, но не нумеpует пустые стpоки.
-e
Подразумевает опцию -v и отображает знак доллара ($) в конце каждой строки (визуализация символа пеpевода стpоки).
-s
Пpи наличии идущих подpяд пустых стpок выводить только одну.
-t
Подразумевает опцию -v. Выводит cимволы табуляции как ^I.
-u
Вывод не буферизуется, то есть символы из входного файла записываются в стандаpтный вывод без задеpжки, как только они были пpочитаны. По умолчанию вывод буфеpизуется, то есть символы могут накапливаться в пpомежуточном буфеpе.
-v
Отображение непечатных символов. Упpавляющие символы выводятся в виде ^X (CRTL+X), символ DEL (восьмеричное 0177) как ^?. Символы не входящие в стандаpтный ASCII-набоp (напpимеp, символы киppилицы с набоpом стаpших pазpядов) выводятся как «M-x», где x — опpеделяемый младшими семи битами символ.
Рассмотрим примеры использования команды:
Файл file выводится на устройство стандартного вывода:
[user@localhost ~]$ cat file
Сцепление (слияние) файлов file1 и file2, после чего они помещаются в файл file3:
[user@localhost ~]$ cat file1 file2 > file3
Пpисоединение файла file1 к концу файла file2:
[user@localhost ~]$ cat file1 >> file2
Вывод содеpжимого файла с нумеpацией стpок, но без нумеpации пустых стpок:
[user@localhost ~]$ cat -b file1
1 Number 1
2 Number 2
3 Number 3
4 Number 4
5 Number 5
Нумеpация всех стpок:
[user@localhost ~]$ cat -n file1
1 Number 1
2 Number 2
3 Number 3
4 Number 4
7 Number 5
Less
Команда less используется для просмотра файлов, размер которых превышает размер экрана. Пользователю предоставляется интерактивынй интерфейс, в котором текст можно пролистывать, производить по нему поиск и т.п..
Имя просматриваемого файла необходимо указать в качестве аргумента программы:
[user@localhost ~]$ less README.txt
Управлять программой less просто: страницы перелистываются пробелом, а когда читать надоест, надо нажать q (Quit). Перелистывать страницы можно и клавишами Page Up/Page Down, для сдвига на одну строку вперед можно применять Enter или стрелку вниз, а на одну строку назад — стрелку вверх. Переход на начало и конец текста выполняется по командам g и G соответственно (Go). Полный список того, что можно делать с текстом в less, выводится по команде h (help). Для поиска и подстветки интересующего понятия можно воспользоваться командой /, после которой необходимо ввести интересующий Вас термин — по нажатию клавиши Enter, курсор перейдёт к первому упоминанию термина, который будет выделен серым цветом. Последующие нажатия / и Enter приведут к продолжению поиска слова по документу.
Программа less используется в качестве основы команды man — при просмотре страниц руководств.
Head
Команда выводит на экран первые несколько строк файла. По умолчанию выводится первые 10 строк. Имя выводимого файла указывается в качестве аргумента программы, и если оно не задано, производится чтение информации со стандартного входа.
С помощью параметра -n можно задать число строк от начала файлы, которые будут выведены на экран. Например:
[user@localhost ~]$ head -n 4 /etc/inittab
# /etc/inittab: init(8) configuration.
# The default runlevel.
id:5:initdefault:
Tail
Команда выводит на экран последние несколько строк файла. По умолчанию выводятся последние 10 строк. Имя выводимого файла указывается в качестве аргумента программы, и если оно не задано, производится чтение информации со стандартного входа.
С помощью параметра -n можно задать число строк от конца файла, которые будут выведены на экран. Например:
[user@localhost ~]$ tail -n 5 /var/log/dmesg
loop: loaded (max 8 devices)
squashfs: version 3.1 (2006/08/19) Phillip Lougher
Registering unionfs 1.4
unionfs: debugging is not enabled
device-mapper: ioctl: 4.7.0-ioctl (2006-06-24) initialised: dm-devel@redhat.com
Таким способом удобно просматривать последние записи системных журналов.
Другим важным параметром команды является -f: команда ожидает изменения в конце фала и отображает их на экране. Часто это используется при просмотре постоянно увеличивающихся файлов. Для завершения команды нажмите Ctrl-C.
Cut
Команда позволяет выводить указанные столбцы или записи из одного или нескольких файлов. Столбцом называется именно столбец — символы с одной и той же позицией в строке, записи же разделяюся символами табуляции. И столбцы и записи задаются указанием их порядкового номера в строке.
Вы можете использовать следующие опции:
-cсписок
вывод столбцов, указанных агрументом список;
-fсписок
вывод полей, указанных агрументом список;
-dсимвол
устанавливает заданный символ в качестве разделителя полей при использовании параметра -f. Если в качестве разделителя используется небуквенный символ (например, пробел), он должен быть заключён в кавычки.
Примеры работы программы:
Выделение первых семи столбцов файла:
[user@localhost ~]$ cat phones.txt
1234567 Борис Петрович
5557845 Анна Иоановна
...
[user@localhost ~]$ cut -c1-7 phones.txt
...
Получение списка групп пользователей, зарегистрированных в системе:
[user@localhost ~]$ cut -f1 -d: /etc/group
root
bin
daemon
sys
adm
...
Paste
Команда paste объединяет два текстовых файла в один. В получившемся файле исходные строки располагаются в соседних столбцах, разделённые символом табуляции (или любым другим символом, указанным через параметр -d).
Часто применяется совместно с программой cut.
sort
Команда sort сортирует строки, входящие во все исходные файлы, и выдает результат на стандартный вывод. Если имена файлов не указаны, или в качестве файла указан «-», исходная информация поступает со стандартного ввода. Команда имеет формат:
sort [-c] [-r] [файл...]
При упорядочении используется один или несколько ключей сортировки, выделяемых из каждой вводимой строки. По умолчанию ключ сортировки один — вся строка, а порядок является лексикографическим, соответствующим принятой кодировке символов.
Вот основные опции команды:
-c
Вместо сортировки файла проверяет, отсортирован ли он. Если файл не отсортирован, команда возвращает 1 и выводит соответствующее сообщение.
-r
Заменить результат сравнения на противоположный.
Рассмотрим примеры использования команды:
Отсортировать файл с фамилиями:
[user@localhost ~]$ cat f.txt
Petrov
Ivanov
Sidorov
Abramov
[user@localhost ~]$ sort f.txt
Abramov
Ivanov
Petrov
Sidorov
Отсортировать список файлов в обратном порядке:
[user@localhost ~]$ ls / | sort -r
var
usr
tmp
sys
srv
sbin
root
...
Uniq
Команда uniq построчно анализирует файл и в случае, если он содержит в себе повторяющиеся строки, выбрасывает дубликаты. Команда имеет следующий формат:
uniq [-c] [исходный_файл]
Если имя исходного файла не указано, команда читает данные со стандартного ввода.
В качестве параметра может быть указано -c, тогда рядом с каждой строкой будет выведено число повторений этой строки.
Рассмотрим примеры использования команды:
Получим имена всех пользователей, работающих в системе в настоящий момент:
[user@localhost ~]$ who | cut -f1 -d' '
root
root
ivan
maria
[user@localhost ~]$ who | cut -f1 -d' ' | uniq
root
ivan
maria
Однако такой результат будет не всегда:
[user@localhost ~]$ who | cut -f1 -d' '
root
ivan
root
maria
[user@localhost ~]$ who | cut -f1 -d' ' | uniq
root
ivan
root
maria
Это происходит потому, что команда uniq сравнивает строки последовательно. Для того, чтобы избежать дублирования, результат можно сперва сортировать:
[user@localhost ~]$ who | cut -f1 -d' ' | sort | uniq
ivan
maria
root
Iconv
Команда iconv не является оригинальной командой UNIX, она появилась в системах, разработанных в рамках проекта GNU. Однако большинство современных версий UNIX содержат эту команду.
Команда предназначена для перекодирования текстовых файлов из одной кодировки в другую и имеет следующий формат:
iconv [-l] -f исходная_кодировка -t конечная_кодировка [исходный_файл]
Если имя исходного файла не указано, команда читает данные со стандартного ввода.
Имя кодировки — исходной или конечной должно соответствовать кодировке в файле, список доступных кодировок можно получить, если запустить команду iconv с параметром -l.
wc
Эта команда предназначена для подсчёта количества строк, символов и слов в указанных файлах. Команда имеет слудующий формат:
wc [-clmw] file...
Можно использовать следующие опции:
-c
Вывод только количества байт.
-l
Вывод только количества строк.
-m
Вывод только количества символов. Отличается от числа байт при многобайтной кодировке.
-w
Вывод только количества слов.
Рассмотрим примеры использования команды:
Подсчёт числа слов в документе:
[user@localhost test]$ wc -w lectures.txt
568 lectures.txt
Число файлов в каталоге:
[user@localhost test]$ ls / | wc -l
Полная статистика по группе xml-файлов (число строк, число слов, число байт):
[user@localhost test]$ cat *.xml | wc
3978 16138 253680
Dd
dd — команда блочного копирования файлов. Она имеет следующий формат:
dd if=исходный_файл of=конечный_файл bs=размер_блока
count=число_блоков skip=число_блолов seek=число_блоков
Программа используется при копировании частей одного файла в другой, часто применяется при работе с устройствами. Рассмотрим параметры, принимаемые командой:
if=
Задаёт имя файла (или устройства), откуда будут копироваться данные.
of=
Задаёт имя файла (или устройства), куда будут копироваться данные.
bs=
Задаёт размер блока копирования в байтах. Можно применять модификаторы размера: «K» — килобайты, «M» — мегабайты и т.п.
count=
Задаёт число копируемых блоков. Если этот параметр не задан, копируется всеь исходный файл.
skip=
Число блоков в исходном файле, которое будет пропущено до чтения.
seek=
Число блоков в файле назначения, которое будет пропущено до записи.
Рассмотрим примеры использования команды:
Копирование загрузочного сектора жёсткого диска в файл bootsect:
[root@localhost test]# dd if=/dev/hda of=bootsect bs=512 count=1
1+0 входных записей
1+0 выходных записей
512 bytes (512 B) copied, 9e-05 seconds, 5,7 MB/s
Копирование файла размером до двух мегабайт на простой гибкий диск и обратно:
[user@localhost test]$ dd if=arch.tar.bz2 of=/dev/fd0 bs=1
1788990+0 входных записей
1788990+0 выходных записей
[user@localhost test]$ dd if=/dev/fd0 of=arch2.tar.bz2 bs=1 count=1788990
1788990+0 входных записей
1788990+0 выходных записей
Команды, использующие регулярные выражения
Grep
Часто пользователю нужно найти только упоминания чего-то конкретного в файле или среди данных, выводимых программой. Обычно эта задача сводится к поиску строк, в которых встречается определенное слово или комбинация символов. Для этого подходит стандартная утилита grep. grep может искать строку в файлах, а может работать как фильтр: получив строки со стандартного ввода, она выведет на стандартный вывод только те строки, где встретилось искомое сочетание символов.
Простой пример: найти своего пользователя в файле /etc/passwd:
[user@localhost test]$ grep user /etc/passwd
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/dev/null
rpc:x:32:32:Portmapper RPC user:/:/dev/null
user:x:500:500::/home/user:/bin/bash
Первый аргумент команды grep — та строка, которую нужно искать в файле или стандартном вводе, в данном случае это «user», а поскольку файл /etc/passwd выводит сведения по строке на каждого пользователя, таким образом можно получить информацию о пользователе «user».
В случае, если нужно искать не конкретное сочетание символов, а какую-то их несложную комбинацию, используют регулярные выражения — способ специальной формулой задать все допустимые последовательности символов (в дискретной математике это понятие формулируется более строго).
В регулярном выражении большинство символов обозначают сами себя, как если бы мы искали обыкновенную текстовую строку, например, «user» и «::» в регулярном выражении соответствуют строкам «Note» и «::» в тексте. Однако некоторые символы обладают специальным значением, самый главный из таких символов — звездочка («*»), поставленная после элемента регулярного выражения, обозначает, что могут быть найдены тексты, где этот элемент повторен любое количество раз, в том числе и ни одного, т.е. просто отсутствует.
С помощью следующей команды можно посмотреть все локальные сетевые имена, зарегистрированные в системе:
[user@localhost ~]$ grep "^127.*" /etc/hosts
127.0.0.1 localhost.localdomain localhost
Символ «.» заменяет «любой символ», а вместе с «*» означает 0 или больше любых символов. Символ «^» в начале регулярного выражения означает, что необходимы строки, начинающиеся с данного шаблона (для обозначения конца строки используют символ «$»).
Существуют и другие способы группирования символов:
«[» и «]» задают класс символов, когда в выражении может встретиться любой из них. С помощью следующего регулярного выражения выводятся все строки, содержащие любые числа (знак «+» является аналогом «*», только задаёт 1 и большее число упоминаний предыдущего символа):
[user@localhost ~]$ grep "[0-9]\+" /etc/hosts
127.0.0.1 localhost.localdomain localhost
192.168.1.4 cat.home cat
«(» и «)» позволяют группировать выражения. Например, следующая команда выводит все строки, содержащие IP-адрес:
[user@localhost ~]$ grep "\([0-9]\+\.\)\{3\}[0-9]\+" /etc/resolv.conf
nameserver 192.168.0.1
Запись «{3}» означает, что предыдущий символ или выражение должно повторяться в точности 3 раза.
Регулярные выражения содержат множество управляющих символов, каждый их которых наделён собственным смыслом. Для того, чтобы воспользоваться непосредственным значением символа (для поиска его в строке), необходимо поставить перед ним символ обратной косой: «\».
Команда grep содержит множество удобных параметров, например вывод номера найденной строки (-n) или вывод только подстроки, соответствующей самому регулярному выражению (-o).
Благодаря регулярным выражениям можно автоматизировать очень многие задачи, которые в противном случае потребовали бы огромной и кропотливой работы человека. Более подробные сведения о возможностях языка регулярных выражений можно получить из руководства команды grep.
Sed
Регулярные выражения можно использовать не только для поиска по файлу, но и для изменения информации. Для такого поиска с заменой можно воспользоватья утилитой sed (stream editor — поточный редактор). sed имеет свой встроенный простой язык, с помощью которого можно задать правила модифицирования файла.
Все команды встроенного языка sed состоят из одной буквы. Например, поиск с заменой выполняет команда «s» (search). Синтаксис у нее следующий:
s/что_искать/на_что_заменять/
Например:
[user@localhost ~]$ ls -l / | sed 's/^d[^ ]\+/directory/'
total 6
directory 2 root root 40 Feb 10 17:57 bin
directory 2 root root 172 Feb 10 20:23 boot
directory 8 root root 3200 Feb 10 17:58 dev
directory 50 root root 480 Feb 10 18:00 etc
directory 3 root root 60 Feb 10 18:00 home
...
Эта команда заменяет в информации о корневом каталоге все строки, начинающиеся с символа d и все, следующие за ним непробельные символы, на слово directory.
Кроме команды поиска, sed имеет команды удаления, копирования и замены строк. Также команды могут иметь модификаторы, например, символ «g» в конце команды поиска указывает делять замену для всех найденных по регулярному шаблону подстрок, а не только для первого.
Попробуем разобраться подробнее, как работает редактор sed. Входной текст sed считывает построчно. К считанной строке он по очереди пробует применить каждую команду сценария. Применив все возможные команды к строке, sed выводит на стандартный вывод то, что от нее осталось. Команда сценария может начинаться с т.н. контекстного адреса, определяющего свойства строк, к которым эту команду можно применять. Простой контекстный адрес — это номер строки (команда применяется к единственной — совпадающей по номеру — строке входного потока) или регулярное выражение (команда применяется ко всем строкам, в которых найдено соответствие этому РВ). Например, команда sed "1s/_/ /g" заменит в первой строке все подчеркивания на пробелы, а sed "/^a/d" удалит (delete) все строки, начинающиеся с «a».
У sed очень широкие возможности, но довольно непривычный синтаксис. Чтобы в нем разобраться, нужно обязательно прочесть руководство sed и знать регулярные выражения.
Резюме
В данном разделе рассматриваются основные команды по работе с файловой системой и текстами, а также примеры их комплексного использования.
Ключевые термины: pwd, cd, ls, mkdir, rmdir, touch, rm, cp, mv, ln, du, tar, find, mkfifo, echo, cat, less, head, tail, cut, paste, sort, uniq, iconv, wc, dd, grep, регулярное выражение, sed
Дополнительные материалы
Курячий Г.В., Маслинский К.А. Операционная система Linux. — М.: Интуит.Ру, 2005. — 392 с.: ил.
Курячий Г.В. Операционная система UNIX. — М.: Интуит.Ру, 2004. — 292 с.: ил.
Рейчардс К., Фостер-Джонсон Э. UNIX: справочник. — СПб.: Питер Ком, 1
Дата добавления: 2014-12-19; просмотров: 114 | Поможем написать вашу работу | Нарушение авторских прав |