Команды по работе с текстом
Автор: Пользователь скрыл имя, 31 Марта 2013 в 11:22, лабораторная работа
Краткое описание
В операционной системе UNIX большинство информации хранится в текстовом виде. Поэтому команды по обработке текстовой информации играют очень важную роль в этой операционной системе.
Познакомимся еще с одной командой, аналог котоpой имеется в DOS-си- темах. Это команда echo (эхо).
Она имеет фоpмат: echo [-n] [arg ...]
Команда echo выводит на устройство стандартного вывода заданные ей аргументы, разделяя их пробелами и завершая их символом новой строки (\n).
Файлы: 1 файл
Лаб текс редактор линукс.docx
— 61.94 Кб (Скачать)user@desktop test $ cat multiline.txt
Simple text:
blah-blah-blah
1 2 3 4 5 6 7 8 9 0
bye!
- Основным назначением команды c
at является объединение файлов, имена которых передаются как аргументы командной строки. Объединить файлы с помощью команды cat orig.txt second.txt multiline.txt > big.txt:
user@desktop test $ cat orig.txt second.txt multiline.txt > big.txt
- Убедиться, что новый файл содержит строки из перечисленных файлов с помощью команды cat big.txt:
user@desktop test $ cat big.txt
Hello, world
One line
A line
Simple text:
blah-blah-blah
1 2 3 4 5 6 7 8 9 0
bye!
Сценарий: Разрезание и склеивание файлов
В данном сценарии изучается, как выделять информацию, разбитую на части с помощью специального символа-разделителя (например, прообела или символа :), из файлов и создавать новые структурированные файлы.
Начальные условия: Командная строка.
- Посмотреть содержимое файла /etc/passwd, в котором содержится информация о пользователях системы, с помощью команды cat /etc/passwd:
user@desktop test $ cat /etc/passwd
root:x:0:0:root:/root:/bin/
bin:x:1:1:bin:/bin:/bin/false
daemon:x:2:2:daemon:/sbin:/
adm:x:3:4:adm:/var/adm:/bin/
lp:x:4:7:lp:/var/spool/lpd:/
sync:x:5:0:sync:/sbin:/bin/
shutdown:x:6:0:shutdown:/sbin:
...
Каждая строка хранит запись об отдельном пользователе. Запись состоит из полей, разделённых символом «:».
- Выделить первый столбец в каждой записи, установив разделитель в «:», с потощью команды cat /etc/passwd | cut -f1 -d::
user@desktop test $ cat /etc/passwd | cut -f1 -d:
root
bin
daemon
adm
lp
sync
shutdown
...
- Отсортировать список пользователей по алфавиту с помощью команды cat /etc/passwd | cut -f1 -d: | sort:
user@desktop test $ cat /etc/passwd | cut -f1 -d: | sort
adm
alias
apache
at
bin
cron
cyrus
...
- Выделить седьмой столбец в каждой записи, соответствующий командной оболочке пользователя, с помощью команды cat /etc/passwd | cut -f7 -d:
user@desktop test $ cat /etc/passwd | cut -f7 -d:
/bin/bash
/bin/false
/bin/false
/bin/false
/bin/false
/bin/sync
...
Список содержит много повторяющихся строк.
- Удалить повторяющиеся строки командой cat /etc/passwd | cut -f7 -d: | uniq:
user@desktop test $ cat /etc/passwd | cut -f7 -d: | uniq
/bin/bash
/bin/false
/bin/sync
/sbin/shutdown
/sbin/halt
/bin/false
...
Некоторые повторяющиеся строки остались, так как сравниваются только последовательные строки.
- Добиться полной уникальности, предварительно отсортировав строки с помощью команды sort. Ввести команду cat /etc/passwd | cut -f7 -d: | sort | uniq:
user@desktop test $ cat /etc/passwd | cut -f7 -d: | sort | uniq
/bin/bash
/bin/false
/bin/sync
/dev/null
/sbin/halt
/sbin/shutdown
- Выделить первый и седьмой столбец файла /etc/passwd в отдельные файлы. Для этого ввести команды cat /etc/passwd | cut -f1 -d: > users и cat /etc/passwd | cut -f7 -d: > shells:
user@desktop test $ cat /etc/passwd | cut -f1 -d: > users
user@desktop test $ cat /etc/passwd | cut -f7 -d: > shells
- Объединить результаты с помощью команды paste users shells:
user@desktop test $ paste users shells
root /bin/bash
bin /bin/false
daemon /bin/false
adm /bin/false
lp /bin/false
sync /bin/sync
...
Сценарий: Быстрый анализ текстов
В данном сценарии изучаются команды, которые позволяют провести первичный анализ файла: с чего он начинается, как заканчивается и каков его размер.
Начальные условия: Командная строка.
- Получить число строк в файле /etc/passwd с помощью команды wc -l /etc/passwd :
user@desktop test $ wc -l /etc/passwd
44 /etc/passwd
- Или другим способом: посчитав число слов в созданном ранее файле users с помощью команды cat users | wc -w:
user@desktop test $ cat users | wc -w
44
- Посмотеть первые несколько строк длинного файла с помощью команды head logs/Xorg.0.log:
user@desktop test $ head logs/Xorg.0.log
X Window System Version 6.8.2
Release Date: 9 February 2005
X Protocol Version 11, Revision 0, Release 6.8.2
Build Operating System: Linux 2.6.13-gentoo i686 [ELF]
Current Operating System: Linux thinkpad 2.6.13-gentoo #1 Wed Sep 7 01:03:14 MSD 2005 i686
Build Date: 08 October 2005
Before reporting problems, check http://wiki.X.Org
to make sure that you have the latest version.
Module Loader present
- Аналогично, посмотеть последние несколько строк с помощью команды tail logs/Xorg.0.log:
user@desktop test $ tail logs/Xorg.0.log
(II) RADEON(0): [RESUME] Attempting to re-init Radeon hardware.
(II) RADEON(0): [agp] Mode 0x1f000201 [AGP 0x8086/0x3340; Card 0x1002/0x4c66]
(II) Mouse1: ps2EnableDataReporting: succeeded
SetClientVersion: 0 8
SetGrabKeysState - disabled
SetGrabKeysState - enabled
(II) 3rd Button detected: disabling emulate3Button
SetClientVersion: 0 8
SetGrabKeysState - disabled
SetGrabKeysState - enabled
Это бывает полезно при просмотре системных журналов — в них самые последние события содержатся в конце файлов.
Сценарий: Поиск строк по регулярным выражениям
В данном сценарии рассматривается практическое использование регулярных выражений для поиска по текстовым файлам.
Начальные условия: Командная строка. Каталог test/log с найденными системными журналами.
- Среди найденных системных журналов посмотреть файл журнала загрузки графичской системы XFree86.0.log с помощью команды less test/log/XFree86.0.log:
user@desktop ~ $ less test/log/XFree86.0.log
Выйти из просмоторщика можно нажатием клавиши q.
- Найти все предупреждения в журнале: строка, начинающаяся с «(WW)». Для этого ввести команду grep "^(WW)" test/log/XFree86.0.log:
user@desktop ~ $ grep "^(WW)" test/log/XFree86.0.log
(WW) The directory "/usr/share/fonts/freefonts/" does not exist.
(WW) The directory "/usr/share/fonts/unifont/" does not exist.
(WW) The directory "/usr/share/fonts/artwiz/" does not exist.
...
- Получить все строки, содержащие следующий шаблон: последовательность из 1 или более цифры или буквы, затем символ собаки, затем еще одна последовательность 1 или более цифры или буквы или точки, затем символ точки, затем от двух до четырёх букв (имя домена первого уровня). Также служебный вывод ошибок удаляется (перенаправляется в нулевое устройство). Для этого ввести команду grep "[a-zA-z0-9]\+@[a-zA-z0-9\.]\+
\.[a-z]\{2,4\}" /etc/* 2>/dev/null:
user@desktop ~ $ grep "[a-zA-z0-9]\+@[a-zA-z0-9\.]\+
/etc/devfsd.conf:# Richard Gooch <rgooch@atnf.csiro.au>
/etc/inittab:# Author: Miquel van Smoorenburg, <miquels@cistron.nl>
/etc/inittab:# Modified by: Patrick J. Volkerding, <volkerdi@ftp.cdrom.com>
...
При работе с несколькими файлами grep по умолчанию использует вывод имени файла перед найденной стокой.
- Избавиться от имени файла в начале строки с помощью ключа -h. Ввести команду grep -h "[a-zA-z0-9]\+@[a-zA-z0-9\.]\+
\.[a-z]\{2,4\}" /etc/* 2>/dev/null:
user@desktop ~ $ grep -h "[a-zA-z0-9]\+@[a-zA-z0-9\.]\+
# Richard Gooch
<rgooch@atnf.csiro.au>
# Author: Miquel van Smoorenburg, <miquels@cistron.nl>
# Modified by: Patrick J. Volkerding, <volkerdi@ftp.cdrom.com>
...
- Для вывода только найденной подстроки используется ключ -o. Ввести команду grep -ho "[a-zA-Z0-9]\+@[a-zA-Z0-9\.]\+
\.[a-z]\{2,4\}" /etc/* 2>/dev/null:
user@desktop ~ $ grep -ho "[a-zA-Z0-9]\+@[a-zA-Z0-9\.]\+
rgooch@atnf.csiro.au
miquels@cistron.nl
volkerdi@ftp.cdrom.com
...
- Получить все файлы каталога /etc/ с помощью команды find /etc -type f 2>/dev/null, игнорируя ошибки:
user@desktop ~ $ find /etc -type f 2>/dev/null
/etc/X11/xorg.conf.example
/etc/X11/Sessions/kde-3.4
/etc/X11/Sessions/Xsession
/etc/X11/chooser.sh
...
- Для каждого из найденных файлов произвести поиск подстроки «nameserver». Для этого ввести команду find /etc -type f -exec grep "nameserver" {} \; 2>/dev/null:
user@desktop ~ $ find /etc -type f -exec grep "nameserver" {} \; 2>/dev/null
# merge the new nameservers with the other options from the old ...
grep --invert-match '^nameserver[[:space:]]' $REALRESOLVCONF
nameserver 10.22.10.20
...
- Для большего удобства добавить вывод имени файла (ключ -H) и номера строки (ключ -n), на которой было найдено совпадение, с помощью команды find /etc -type f -exec grep -Hn "nameserver" {} \; 2>/dev/null:
user@desktop ~ $ find /etc -type f -exec grep -Hn "nameserver" {} \; 2>/dev/null
/etc/ppp/ip-up:24:
/etc/ppp/ip-up:26:
/etc/ppp/resolv.conf:1:
...
Таким образом, команда grep может эффективно использоваться вместе с командой find для нахождения информации в файлах.