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

Автор: Пользователь скрыл имя, 31 Марта 2013 в 11:22, лабораторная работа

Краткое описание

В операционной системе UNIX большинство информации хранится в текстовом виде. Поэтому команды по обработке текстовой информации играют очень важную роль в этой операционной системе.
Познакомимся еще с одной командой, аналог котоpой имеется в DOS-си- темах. Это команда echo (эхо).
Она имеет фоpмат: echo [-n] [arg ...]
Команда echo выводит на устройство стандартного вывода заданные ей аргументы, разделяя их пробелами и завершая их символом новой строки (\n).

Файлы: 1 файл

Лаб текс редактор линукс.docx

— 61.94 Кб (Скачать)
  • [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

15

  • Полная статистика по группе 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 и знать регулярные выражения.

 

Лабораторная  работа №8

Цель занятия: знакомство с командной строкой UNIX, командами обработки текстовых файлов.

 

Изучаемые команды: cat, cd, cp, cut, echo, find, grep, head, ln, ls, mkdir, mv, paste, pwd, sort, tail, tar, touch, uniq, wc

Текстовой редактор UNIX /Linux

Cоздание новых текстовых файлов

В этом сценарии изучаются команды  для создания и модифицирования  текстовых файлов. Командная строка.

Начальные условия:

  1. Ввести команду echo "One line":

user@desktop test $ echo "One line"

One line

Данная команда принимает строку в виде аргумента и выводит  её на стандартный вывод.

  1. Ввести ту же команду, но перенаправить вывод в файл second.txt с помощью «>». Ввести команду echo "One line" > second.txt:

user@desktop test $ echo "One line" > second.txt

  1. Добавить в конец файла second.txt строку «A line» с помощью другого перенаправления echo "A line" >> second.txt:

user@desktop test $ echo "A line" >> second.txt

  1. Вывести содержимое файла с помощью команды cat second.txt:

user@desktop test $ cat second.txt

One line

A line

  1. С помощью команды cat можно создавать многострочные файлы —, если переопределить вывод программы в файл и вводить текст до нажатия Ctrl-D (конец ввода). Ввести команду cat >multiline.txt и набрать текст

user@desktop test $ cat >multiline.txt

Simple text:

blah-blah-blah

1 2 3 4 5 6 7 8 9 0

 

bye!

 

(Ctrl+D)

user@desktop test $

  1. Убедиться, что содержимое файла совпадает с введённым текстом, включая все переводы строки. Для этого ввести команду cat multiline.txt

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