Команды по работе с текстом
Лабораторная работа, 31 Марта 2013, автор: пользователь скрыл имя
Краткое описание
В операционной системе 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:/
Первый аргумент команды 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/что_искать/на_что_заменять/
Например:
[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, ech
Текстовой редактор UNIX /Linux
Cоздание новых текстовых файлов
В этом сценарии изучаются команды для создания и модифицирования текстовых файлов. Командная строка.
Начальные условия:
- Ввести команду echo "One line":
user@desktop test $ echo "One line"
One line
Данная команда принимает
- Ввести ту же команду, но перенаправить вывод в файл second.txt с помощью «>». Ввести команду echo "One line" > second.txt:
user@desktop test $ echo "One line" > second.txt
- Добавить в конец файла second.txt строку «A line» с помощью другого перенаправления echo "A line" >> second.txt:
user@desktop test $ echo "A line" >> second.txt
- Вывести содержимое файла с помощью команды cat second.txt:
user@desktop test $ cat second.txt
One line
A line
- С помощью команды 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 $
- Убедиться, что содержимое файла совпадает с введённым текстом, включая все переводы строки. Для этого ввести команду cat multiline.txt