Команды по работе с текстом

Автор: Пользователь скрыл имя, 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!

 

  1. Основным назначением команды cat является объединение файлов, имена которых передаются как аргументы командной строки. Объединить файлы с помощью команды cat orig.txt second.txt multiline.txt > big.txt:

user@desktop test $ cat orig.txt second.txt multiline.txt > big.txt

  1. Убедиться, что новый файл содержит строки из перечисленных файлов с помощью команды 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!

Сценарий: Разрезание и склеивание файлов

В данном сценарии изучается, как выделять информацию, разбитую на части с  помощью специального символа-разделителя (например, прообела или символа :), из файлов и создавать новые структурированные файлы.

Начальные условия: Командная строка.

  1. Посмотреть содержимое файла /etc/passwd, в котором содержится информация о пользователях системы, с помощью команды cat /etc/passwd:

user@desktop test $ cat /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/bin/false

daemon:x:2:2:daemon:/sbin:/bin/false

adm:x:3:4:adm:/var/adm:/bin/false

lp:x:4:7:lp:/var/spool/lpd:/bin/false

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

...

Каждая строка хранит запись об отдельном  пользователе. Запись состоит из полей, разделённых символом «:».

  1. Выделить первый столбец в каждой записи, установив разделитель в «:», с потощью команды cat /etc/passwd | cut -f1 -d::

user@desktop test $ cat /etc/passwd | cut -f1 -d:

root

bin

daemon

adm

lp

sync

shutdown

...

  1. Отсортировать список пользователей по алфавиту с помощью команды cat /etc/passwd | cut -f1 -d: | sort:

user@desktop test $ cat /etc/passwd | cut -f1 -d: | sort

adm

alias

apache

at

bin

cron

cyrus

...

  1. Выделить седьмой столбец в каждой записи, соответствующий командной оболочке пользователя, с помощью команды 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

...

Список содержит много повторяющихся  строк.

  1. Удалить повторяющиеся строки командой 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

...

Некоторые повторяющиеся строки остались, так как сравниваются только последовательные строки.

  1. Добиться полной уникальности, предварительно отсортировав строки с помощью команды 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

  1. Выделить первый и седьмой столбец файла /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

  1. Объединить результаты с помощью команды 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

...

Сценарий: Быстрый анализ текстов

В данном сценарии изучаются команды, которые позволяют провести первичный  анализ файла: с чего он начинается, как заканчивается и каков  его размер.

Начальные условия: Командная строка.

  1. Получить число строк в файле /etc/passwd с помощью команды wc -l /etc/passwd :

user@desktop test $ wc -l /etc/passwd

44 /etc/passwd

  1. Или другим способом: посчитав число слов в созданном ранее файле users с помощью команды cat users | wc -w:

user@desktop test $ cat users | wc -w

44

  1. Посмотеть первые несколько строк длинного файла с помощью команды 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

  1. Аналогично, посмотеть последние несколько строк с помощью команды 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 с найденными системными журналами.

  1. Среди найденных системных журналов посмотреть файл журнала загрузки графичской системы XFree86.0.log с помощью команды less test/log/XFree86.0.log:

user@desktop ~ $ less test/log/XFree86.0.log

Выйти из просмоторщика можно нажатием клавиши q.

  1. Найти все предупреждения в журнале: строка, начинающаяся с «(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 или более цифры или буквы, затем символ собаки, затем еще одна последовательность 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\.]\+\.[a-z]\{2,4\}" /etc/* 2>/dev/null

/etc/devfsd.conf:# Richard Gooch  <rgooch@atnf.csiro.au>                3-JUL-2000

/etc/inittab:# Author:  Miquel van Smoorenburg, <miquels@cistron.nl>

/etc/inittab:# Modified by:  Patrick J. Volkerding, <volkerdi@ftp.cdrom.com>

...

При работе с несколькими файлами grep по умолчанию использует вывод имени файла перед найденной стокой.

  1. Избавиться от имени файла в начале строки с помощью ключа -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\.]\+\.[a-z]\{2,4\}" /etc/* 2>/dev/null

      # Richard Gooch  <rgooch@atnf.csiro.au>                3-JUL-2000

      # Author:  Miquel van Smoorenburg, <miquels@cistron.nl>

      # Modified by:  Patrick J. Volkerding, <volkerdi@ftp.cdrom.com>

      ...

  1. Для вывода только найденной подстроки используется ключ -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\.]\+\.[a-z]\{2,4\}" /etc/* 2>/dev/null

rgooch@atnf.csiro.au

miquels@cistron.nl

volkerdi@ftp.cdrom.com

...

  1. Получить все файлы каталога /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

...

  1. Для каждого из найденных файлов произвести поиск подстроки «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

...

  1. Для большего удобства добавить вывод имени файла (ключ -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:              # merge the new nameservers with the other optio...

/etc/ppp/ip-up:26:                      grep --invert-match '^nameserver[[:space...

/etc/ppp/resolv.conf:1:nameserver 10.22.10.20

...

Таким образом, команда grep может эффективно использоваться вместе с командой find для нахождения информации в файлах.


Информация о работе Команды по работе с текстом