Раздел 5

НЕСКОЛЬКО ПОЛЕЗНЫХ КОМАНД ОС UNIX

Обзор

Несколько команд ОС UNIX являются очень полезными инструментами. В этом разделе говорится об использовании команд grep и sort с файлами и конвейерами. Здесь также обсуждается потоковый редактор - средство редактирования файла из командной строки. Затем описывается, как разделить или объединить колонки данных. После этого объясняется, как можно направить результат выполнения команды одновременно в файл и на терминал с помощью команды tee. Наконец обсуждается команда перекодировки символов tr.

ЦЕЛИ

1. Использовать grep для поиска по шаблону в файлах или конвейерах.
2. Копировать и редактировать файл согласно списку команд с помощью редактора потоков, sed.
3. Использовать команду sort с файлами и в конвейерах.
4. Выделять или комбинировать столбцы данных используя утилиты
cut и paste.
5. Посылать вывод команды в файл и на экран терминала одновременно с помощью команды tee.
6. Использовать команду tr для замены вывода, чтобы отразить подстановку символа.

Поиск в файле с помощью команды grep.

В уроке 3 раздела 1, вы использовали команду grep для поиска в файле по шаблону. Формат команды grep:

grep -опции шаблон_поиска имя_файла(ов)

Вы можете также использовать символы генерации в именах файлов. Если система находит строки в нескольких файлах, то она отображает каждую найденную строку с указанием имени соответствующего файла в начале строки. См. пример 1.

Опции, используемые командой grep

Вы можете применять одну или более из этих опций с командой grep :

Опция -i игнорирует различие верхнего и нижнего регистров.

Опция -c отображает число строк, содержащих шаблон поиска.

Опция -l сообщает только имена файлов содержащих шаблон.

Опция -v отображает все строки НЕ соответствующие шаблону.

Опция -n предваряет каждую найденную строку номером строки.

Для получения полного списка опций, используемых командой grep, смотри руководство пользователя.

ПОИСК В ФАЙЛЕ С ПОМОЩЬЮ КОМАНДЫ grep

grep -опции шаблон_поиска имя_файла(ов)

Опции команды grep (можно сочетать)

Опция -i игнорирует различие верхнего и нижнего регистров.

Опция -c отображает число строк, содержащих шаблон поиска.

Опция -l сообщает только имена файлов содержащих шаблон.

Опция -v отображает все строки НЕ соответствующие шаблону.

Опция -n предваряет каждую найденную строку номером строки.

ПРИМЕР 1:

$ cd unit5<RET>

$ grep nut parts*<RET>

parts1:C2345643 3/4" nut RC Electronics .42 120

parts2:Z2365432 1/4" nut Global House .25 620

$

Опции, используемые grep (продолжение)

В примере 1, опция -i игнорирует различия верхнего и нижнего регистров во время поиска шаблона nut.

Пример 2 сочетает опцию -i с опцией -c, которая отображает число строк, содержащих шаблон nut.

В примере 3, опция -l сообщает только имена файлов, содержащих шаблон nut.

ОПЦИИ, ИСПОЛЬЗУЕМЫЕ grep (ПРОДОЛЖЕНИЕ)

ПРИМЕР 1:

$ grep -i nut parts1 > partfiles<RET>

$ cat partfiles<RET>

C1987653 Wing Nut Wafer Supplies .83 360

C2345643 3/4" nut RC Electronics .42 120

ПРИМЕР 2

$ grep -ic nut parts1<RET>

2

ПРИМЕР 3:

$ grep -l nut par*<RET>

parts1

parts2

Опции, используемые grep (продолжение)

В примере 4, опция -v отображает все строки НЕ содержащие шаблон not, которыми являются номера телефонов не установленные в файле phone. Результаты помещаются в новый файл, названный rid. Перемещая rid в phone, вы уничтожаете все неустановленные номера телефонов из файла phone.

В примере 5, опция -n предваряет каждую строку которая соответствует шаблону no ее номером в файле. Заметим, что если вы выбрали более, чем один файл, опция -n отображает имена файлов также как и номера строк.

ОПЦИИ, ИСПОЛЬЗУЕМЫЕ grep (ПРОДОЛЖЕНИЕ)

ПРИМЕР 4:

$ cat phone<RET>

not assigned no 614-555-3189

Shari French Yes 614-764-1112

Jo Somers No 614-764-1113

Mona Cole yes 614-764-1114

Jackie Bell yes 201-457-1112

jackie Harris no 212-979-1113

Joe Brown No 212-979-1112

not assigned yes 312-555-1110

Jeff Davis no 312-971-1113

Greg Brown yes 312-971-1114

$ grep -v assigned phone > rid<RET>

$ mv rid phone<RET>

$ cat phone<RET>

Shari French Yes 614-764-1112

Jo Somers No 614-764-1113

Mona Cole yes 614-764-1114

Jackie Bell yes 201-457-1112

jackie Harris no 212-979-1113

Joe Brown No 212-979-1112

Jeff Davis no 312-971-1113

Greg Brown yes 312-971-1114

ПРИМЕР 5:

$ grep -n no phone<RET>

5:jackie Harris no 212-979-1113

7:Jeff Davis no 312-971-1113

Поиск шаблона с помощью grep.

До сих пор в формате grep:

grep -опции шаблон_поиска имя_файла(ов)

вы использовали символы генерации имен в именах файлов. Вы можете также использовать в шаблоне следующие метасимволы :

^ (крышка): начало строки

$ (знак доллара): конец строки

Когда используются метасимволы:

Если символ крышка не является первым символом в строке, система принимает литерал крышка для сравнения. Например, ^xyz означает - буквы xyz в начале строки; x^e означает буквы и символы x^e буквально.

Если знак доллара не является последним символом в строке, система принимает его как буквальный знак доллара для сравнения. например xy$ означает xy в конце строки; x$y означает буквы и символы x$y буквально.

Если вы предваряете какой либо из символов обратным слэшем (\), система читает символ буквально.

Если шаблон содержит более одного слова или любой специальный символ, заключите их в одиночные кавычки. Кавычки связывают слова вместе в один аргумент, так что shell не интерпретирует специальные символы.

См. пример 1.

Использование grep с конвейерами

Вы можете также использовать grep в конвейере, чтобы найти определенный шаблон в выводе команды перед конвейером. См. пример 2.

В примере 3, результаты команды ls -l передаются через конвейер на вход команды grep. По шаблону '^d' находятся строки из вывода команды ls -l, которые имеют букву d в начале строки (^). Таким путем система отображает длинный список, состоящий только из каталогов.

ПОИСК ШАБЛОНА С ПОМОЩЬЮ grep

^(крышка): начало строки

$(знак доллара): конец строки

ПРИМЕР 1:

$ grep '3$' phone<RET>

Jo Somers No 614-764-1113

jackie Harris no 212-979-1113

Jeff Davis no 312-971-1113

ПРИМЕР 2:

$ grep -i '^do not' ../unit3/check.poem<RET>

do not feign affection. Neither be cynical about love; for

do not distress yourself with imaginings. Many fears are

$

ПРИМЕР 3:

$ ls -l .. | grep '^d'<RET>

drwxr-xr-x 2 jas train 32 Nov 16 16:26 bin

drwxrwxrwx 3 jas train 96 Nov 17 16:19 fun

drwxrwx--- 2 jas train 144 Nov 16 16:40 unit10

drwxrwx--- 2 jas train 208 Nov 16 16:10 unit3

drwxrwxrwx 4 jas train 288 Nov 18 08:49 unit4

drwxrwx--- 2 jas train 480 Nov 17 10:55 unit5

drwxrwx--- 2 jas train 368 Nov 17 16:42 unit6

drwxrwx--- 2 jas train 32 Nov 17 14:24 unit6old

drwxrwx--- 2 jas train 288 Nov 16 16:23 unit7

drwxrwx--- 2 jas train 256 Nov 17 10:49 unit8

drwxrwx--- 2 jas train 64 Nov 16 16:27 unit9

$

Потоковый редактор sed

Программисты часто используют потоковый редактор sed, для форматирования и обработки данных. В командной строке sed обеспечивает удобный способ для редактирования как файлов так и стандартного ввода. Команды редактирования, которые использует sed, подобны командам редактора ed. Но в отличие от ed или vi, sed - не интерактивный редактор. Формат команды sed:

sed 'команды редактора' файл

Хорошая мысль - заключать команды редактора в кавычки, так чтобы shell не интерпретировала специальные символы.

sed НЕ копирует файлы в буфер. Вместо этого, он редактирует файл от начала до конца, одну строку в каждый момент времени, записывая результаты на стандартный вывод, как например экран вашего терминала. Кроме специально оговоренных случаев, sed выполняет команду редактирования для каждой строки файла. Для размещения результатов, вы должны перенаправить их в другой файл. Исходный файл не изменяется.

ЗАМЕЧАНИЕ: Для размещения результатов НЕ перенаправляйте их в исходный файл, иначе вы уничтожите содержание исходного файла.

В примере 1, когда вы уничтожаете строки 2 и 3 файла flower, одна оставшаяся строка появляется на экране. Когда вы выводите файл floral, все три строки все еще появляются. Вы размещаете результаты, только когда вы перенаправляете их в новый файл floral.

Ели вы опускаете параметр файл, подлежащая редактированию информация принимается со стандартного ввода. Это позволяет Вам использовать sed в конвейере. В примере 2, sed уничтожает первую строку вывода команды ls -l. Первая строка сообщает общее количество блоков, что не нужно многим пользователям.

ПОТОКОВЫЙ РЕДАКТОР sed

sed 'команда редактора' файл

ПРИМЕР 1:

$ cat flower<RET>

A rose is a rose is a rose

What's in a name?

A rose by any other name would smell as sweet.

$ sed '2,3d' flower<RET>

A rose is a rose is a rose

$ cat flower<RET>

A rose is a rose is a rose

What's in a name?

A rose by any other name would smell as sweet.

$ sed '2,3d' flower > floral<RET>

$ cat floral<RET>

A rose is a rose is a rose

ПРИМЕР 2:

$ ls -l<RET>

total 9

-rwxrwx--- 1 jas train 224 Nov 16 16:23

-rwxrwx--- 1 jas train 92 Nov 16 16:23 flower

-rwxrwx--- 1 jas train 560 Nov 16 16:23 friends

-rw------- 1 jas train 353 Nov 17 10:46 parts

-rw------- 1 jas train 344 Nov 17 10:26 parts1

-rw------- 1 jas train 294 Nov 17 10:29 parts2

-rwxrwx--- 1 jas train 317 Nov 16 16:23 phone

-rwxrwx--- 1 jas train 139 Nov 16 16:25 race

$ ls -l | sed '1d'<RET>

-rwxrwx--- 1 jas train 224 Nov 16 16:23 cut.phone

-rwxrwx--- 1 jas train 92 Nov 16 16:23 flower

-rwxrwx--- 1 jas train 560 Nov 16 16:23 friends

-rw------- 1 jas train 353 Nov 17 10:46 parts

-rw------- 1 jas train 344 Nov 17 10:26 parts1

-rw------- 1 jas train 294 Nov 17 10:29 parts2

-rwxrwx--- 1 jas train 317 Nov 16 16:23 phone

-rwxrwx--- 1 jas train 139 Nov 16 16:25 race

Потоковый редактор sed (продолжение)

В примере 1, команда sed находит первое появление слова rose в каждой строке файла flower и заменяет rose на daisy. Результаты помещаются в файл newflower. Следующая команда sed находит каждое появление слова rose в файле flower и заменяет rose на daisy. результаты размещаются в файл newflower1.

В примере 2, команда grep находит stu2 в выводе команды who. Затем команда sed добавляет два символа табуляции в начало вывода.

Для более полной информации обратитесь к руководству по редактированию для UNIX System V, которое содержит учебник по sed.

ПОТОКОВЫЙ РЕДАКТОР sed (ПРОДОЛЖЕНИЕ)

ПРИМЕР 1:

$ sed 's/rose/daisy/' flower > newflower<RET>

$ cat newflower<RET>

A daisy is a rose is a rose

What's in a name?

A daisy by any other name would smell as sweet.

$ sed 's/rose/daisy/g' flower > newflower1<RET>

$ cat newflower1<RET>

A daisy is a daisy is a daisy

What's in a name?

A daisy by any other name would smell as sweet.

$

ПРИМЕР 2:

$ who | grep 'stu2'<RET>

stu2 term/26 Dec 19 07:44

$ who | grep 'stu2' | sed 's/^/<TAB><TAB>/'<RET>

stu2 term/26 Dec 19 07:44

$

Сортировка по полям.

В разделе 1, уроке 3, вы использовали команду sort для упорядочения строк файла в порядке ASCII. В дополнение к сортировке целой строки, вы можете сортировать выбранные поля внутри строки. По умолчанию, разделителем полей считается первый встреченный пустой символ (табуляция или пробел). Нумерация полей начинается с нуля. Все пустые символы в начале строки являются частью поля 0. Поле 1 начинается со следующей последовательности пустых символов и так далее.

Например предположим, что первая строка книги содержит: Оливер Твист 1812. Полями являются:

0 1 2

Оливер Твист 1812

Использование команды sort

Опция -r команды sort меняет на обратный порядок отсортированных строк.

Опция -f команды sort игнорирует различие в регистрах.

Опция -b (пустой символ) команды sort игнорирует первый пустой символ поля и начинает сортировку каждого поля с первого непустого символа.

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

sort -опция +поле файл(ы)

В примере 1, число 2, следующее за знаком плюс, означает имя поля с которого начинается сортировка. Команда sort сравнивает поля, начиная с поля 1 до конца строки. Так Joe Brown No появляется раньше чем Greg Brown yes, так как в сортировке по порядку ASCII верхний регистр No предшествует нижнему регистру yes.

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

sort -опция +поле -нежелательное поле(я) файл(ы)

Если два сортируемых поля идентичны, система проводит ASCII сортировку, начиная с начала строки, чтобы определить порядок. В примере 2, число 1 следующее после знака плюс (+) - имя поля с которого начинается сортировка. Число 2, следующее за знаком минус (-), означает прекратить сортировку точно перед этим полем. Команда sort НЕ сравнивает поля перед полем 2. Поэтому Greg Brown yes идет впереди Joe Brown No, так как сортировка ASCII не продолжается до конца строки.

СОРТИРОВКА ПО ПОЛЯМ

sort -опция +поле файл(ы)

sort -опция +поле -нежелательное поле(я) файл(ы)

$ cat phone<RET>

Shari French Yes 614-764-1112

Jo Somers No 614-764-1113

Mona Cole yes 614-764-1114

Jackie Bell yes 201-457-1112

jackie Harris no 212-979-1113

Joe Brown No 212-979-1112

Jeff Davis no 312-971-1113

Greg Brown yes 312-971-1114

ПРИМЕР 1:

$ sort -b +2 phone<RET>

Joe Brown No 212-979-1112

Jo Somers No 614-764-1113

Shari French Yes 614-764-1112

jackie Harris no 212-979-1113

Jeff Davis no 312-971-1113

Jackie Bell yes 201-457-1112

Greg Brown yes 312-971-1114

Mona Cole yes 614-764-1114

ПРИМЕР 2:

$ sort -f +1 -2 phone<RET>

Jackie Bell yes 201-457-1112

Greg Brown yes 312-971-1114

Joe Brown No 212-979-1112

Mona Cole yes 614-764-1114

Jeff Davis no 312-971-1113

Shari French Yes 614-764-1112

jackie Harris no 212-979-1113

Jo Somers No 614-764-1113

Дополнительные опции полей, используемые sort

Если поля файла не разделены табуляцией или пробелами, вы можете выбрать разделитель полей с помощью опции -t за которой следует желаемый разделитель, заключенный в скобки. См. пример 1.

ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ ПОЛЕЙ, ИСПОЛЬЗУЕМЫЕ sort

ПРИМЕР 1:

$ cat race<RET>

Reynolds:WINNER:est:22:45

Stultz:LOSER:est:24:12

French:TIE:est:28:16

Somers:TIE:est:28:16

Bunge:LOSER:est:25:07

Burkhard:WINNER:est:22:56

$ sort -t':' +1 race<RET>

Stultz:LOSER:est:24:12

Bunge:LOSER:est:25:07

French:TIE:est:28:16

Somers:TIE:est:28:16

Reynolds:WINNER:est:22:45

Burkhard:WINNER:est:22:56

Выделение колонок с использованием cut

Команда cut выбирает поля (столбцы) данных в файле. По умолчанию разделителем полей (разграничителем) является один символ табуляции. Команда сut ожидает в точности ОДИН СИМВОЛ ТАБУЛЯЦИИ между полями. Система считает строку с двумя последовательными табуляциями как "ноль" или отсутствующее поле.

В отличие от команды sort, команда сut считает поля, начиная с номера 1. Например, предположим, что первая строка книги имеет строку: Оливер Твист 1812. Полями будут:

1 2 3

Оливер Твист 1812

Для выделения колонок из файла используйте формат:

cut -fполе(я) формат

Опция -f определяет поля для выделения: одно поле, список полей разделенных запятыми (например 2,6,9) или ряд полей через дефис (например 2-4).

Замечание: опция -f имеет различные значения в различных командах. Например sort -f игнорирует различия верхнего и нижнего регистров. Однако cut -f определяет поля для выделения.

Команда cut записывает поля на стандартный вывод, как например экран вашего терминала. Для сохранения результатов вы должны перенаправить их в другой файл.

В примере 1, каждое поле в файле cut.phone отделено одним символом табуляции. Поэтому вы можете выделить поле 2, фамилия, и поле 4, номер телефона, из файла cut.phone.

Используя опцию -d, вы можете выбрать различные разделители полей (разграничители) для команды cut. Если разграничителем является пробел, вы должны поместить его в скобки, так как shell воспринимает пробел как разделитель слов в командной строке. Несколько столбцов выводятся с тем же разграничителем, который определен в команде cut.

В примере 2, каждое поле в команды who отделено пробелом. Система связывает в канал вывод команды who и ввод команды cut. Опция -d выделяет поле 1 из вывода команды who. Опция -f1 выделяет только первое поле , которое содержит только входные имена пользователей системы.

ВЫДЕЛЕНИЕ СТОЛБЦОВ С ИСПОЛЬЗОВАНИЕМ cut

cut -f-поле(я) файл

$ cat cut.phone<RET>

Shari French Yes 614-764-1112

Jo Somers No 614-764-1113

Mona Cole уes 614-764-1114

Jackie Bell yes 201-457-1112

jackie Harris no 212-979-1113

Joe Brown No 212-979-1112

Jeff Davis no 312-971-1113

Greg Brown yes 312-971-1114

ПРИМЕР 1:

$ cut -f2,4 cut.phone<RET>

French 614-764-1112

Somers 614-764-1113

Cole 614-764-1114

Bell 201-457-1112

Harris 212-979-1113

Brown 212-979-1112

Davis 312-971-1113

Brown 312-971-1114

$ cut -f1,2 cut.phone > names<RET>

$ cut -f4 cut.phone > numbers<RET>

ПРИМЕР 2:

$ who | cut -d'<SPACE>' -f1<RET>

stu1

stu2

stu3

stu4

stu5

Выделение колонок с использованием cut (продолжение)

В примере 1, опция cut -d использует двоеточие как разделитель полей. Так как опцией -f выбрано несколько полей, двоеточие появляется как разделитель в выводе.

Опция -c позволяет вам определить список позиций символов. Чтобы выделить позиции символов из файла используйте формат:

cut -cпозиция(и) файл

В примере 2, первая команда cut выделяет символы с первого по десятый и оставшиеся символы, начиная с 54-го из вывода команды ls -l. Эти символы включают права доступа и имена файлов. Команда sed размещает два символа табуляции перед выводом, чтобы центрировать его на экране. Для информации о других опциях, познакомьтесь со страницами руководства, посвященными cut.

ВЫДЕЛЕНИЕ СТОЛБЦОВ С ИСПОЛЬЗОВАНИЕ cut (ПРОДОЛЖЕНИЕ).

cut -cпозиция(и) файл

ПРИМЕР 1:

$ cut -d: -f1,2 race<RET>

Reynolds:WINNER

Stultz:LOSER

French:TIE

Somers:TIE

Bunge:LOSER

Burkhard:WINNER

ПРИМЕР 2:

$ ls -l | cut -c1-10,54- | sed 's/^/<TAB><TAB>/'<RET>

total 10

-rwxrwx--- cut.phone

-rwxrwx--- flower

-rwxrwx--- friends

-rw------- parts

-rw------- parts1

-rw------- parts2

-rwxrwx--- phone

-rwxrwx--- race

Соединение столбцов с помощью paste

Если cut выделяет столбцы, paste соединяет строки файла "бок о бок". По умолчанию строки из файла отделяются символом табуляции.

Команда paste также записывает столбцы на стандартный вывод, как например экран вашего терминала. Для размещения результатов, вы должны перенаправить их в другой файл.

Чтобы слить колонки в файл, длины файлов должен совпадать. Формат:

paste файл1 файл2

Смотри пример 1.

СОЕДИНЕНИЕ СТОЛБЦОВ
С ПОМОЩЬЮ
paste

paste файл1 файл2

$ cat numbers<RET> $ cat names<RET>

614-764-1112 Shari French

614-764-1113 Jo Somers

614-764-1114 Mona Cole

201-457-1112 Jackie Bell

212-979-1113 jackie Harris

212-979-1112 Joe Brown

312-971-1113 Jeff Davis

312-971-1114 Greg Brown

ПРИМЕР 1:

$ paste numbers names<RET>

614-764-1112 Shari French

614-764-1113 Jo Somers

614-764-1114 Mona Cole

201-457-1112 Jackie Bell

212-979-1113 jackie Harris

212-979-1112 Joe Brown

312-971-1113 Jeff Davis

312-971-1114 Greg Brown

$ paste numbers names | sort -b +2<RET>

201-457-1112 Jackie Bell

212-979-1112 Joe Brown

312-971-1114 Greg Brown

614-764-1114 Mona Cole

312-971-1113 Jeff Davis

614-764-1112 Shari French

212-979-1113 jackie Harris

614-764-1113 Jo Somers

$

Направление вывода в файл и на терминал с помощью tee

Результаты работы команд sort, cut и paste отображаются на стандартном выводе. Чтобы загрузить результаты в файл, вам нужно использовать перенаправление. В отличие от вышеуказанных команд, команда tee отображает результаты на стандартном выводе и в то же самое время перенаправляет вывод в файл. Обычно команда tee используется в конвейерах.

Формат команды tee:

tee [-опция] имя_файла

Результаты помещаются в файл заданный параметром имя_файла.

В примере 1, команда tee выводит содержимое текущего каталога на экран терминала и записывает ту же самую информацию в файл, названный listing.

В примере 2, команда tee помещает вывод команды grep в файл, названый winner. Команда wc определяет число строк, слов и символов в файле winner.

Опции, используемые tee

Опция -a добавляет вывод в конец названного файла, не его заново.

НАПРАВЛЕНИЕ ВЫВОДА В ФАЙЛ
И НА ТЕРМИНАЛ С ПОМОЩЬЮ
tee

.tee [-опция] имя_файла

ПРИМЕР 1:

$ who | tee listing<RET>

stu1 term/34 Oct 27 08:15

stu2 term/35 Oct 27 09:27

stu5 term/28 Oct 27 10:15

stu6 term/29 Oct 27 14:59

stu8 term/32 Oct 27 15:18

stu9 term/31 Oct 27 15:33

$ cat listing<RET>

stu1 term/34 Oct 27 08:15

stu2 term/35 Oct 27 09:27

stu5 term/28 Oct 27 10:15

stu6 term/29 Oct 27 14:59

stu8 term/32 Oct 27 15:18

stu9 term/31 Oct 27 15:33

$

ПРИМЕР 2:

$ cat race<RET>

Reynolds:WINNER:est:22:45

Stultz:LOSER:est:24:12

French:TIE:est:28:16

Somers:TIE:est:28:16

Bunge:LOSER:est:25:07

Burkhard:WINNER:est:22:56

$ grep -i win race | tee winner | wc<RET>

2 2 52

$ cat winner<RET>

Reynolds:WINNER:est:22:45

Burkhard:WINNER:est:22:56

$

Замена вывода команды с помощью tr

Команда tr транслирует символы. Она берет стандартный вывод команды, производит указанную трансляцию и посылает результаты на стандартный вывод. Так как команда tr использует стандартный ввод, вы можете перенаправить его на ввод из файла или связать его в канал с другой командой.

Формат команды tr:

tr строка1 строка2

Строка1 состоит из исходных символов, которые вы хотите заменить.

Строка2 состоит из заменяющих символов.

Команда tr берет каждый символ из строки1 и заменяет его на соответствующий ему заменяющий символ из строки2.

Команда tr также транслирует диапазоны символов. Если вы хотите транслировать буквы нижнего регистра в буквы верхнего регистра в файле, используйте следующий формат:

tr '[a-z]' '[A-Z]' < имя файла

ОСТОРОЖНО: Вы должны использовать символ перенаправления < и/или конвейера, чтобы система не использовала имя файла по умолчанию.

Размещайте строки в кавычках, чтобы shell не интерпретировал специальные символы (метасимволы). См. пример 1.

В примере 2 команда cut выделяет поля 1 и 5 из файла /etc/passwd. Ее вывод связывается в канал с командой tr, которая заменяет двоеточие на символ табуляции, чтобы сделать чтение вывода более удобным.

ЗАМЕНА ВЫВОДА КОМАНДЫ
С ПОМОЩЬЮ
tr

tr строка1 строка2

tr '[a-z]' '[A-Z]' < имя файла

ПРИМЕР 1:

$ tr '[a-z]' '[A-Z]' < phone<RET>

SHARI FRENCH YES 614-764-1112

JO SOMERS NO 614-764-1113

MONA COLE YES 614-764-1114

JACKIE BELL YES 201-457-1112

JACKIE HENDERSON NO 212-979-1113

JOE BROWN NO 212-979-1112

JEFF DAVIS NO 312-971-1113

GREG BROWN YES 312-971-1114

$ tr '[A-Z]' '[a-z]' < phone >small<RET>

$ cat small<RET>

shari french yes 614-764-1112

jo somers no 614-764-1113

mona cole yes 614-764-1114

jackie bell yes 201-457-1112

jackie henderson no 212-979-1113

joe brown no 212-979-1112

jeff davis no 312-971-1113

greg brown yes 312-971-1114

ПРИМЕР 2:

$ cut -d: -f1,5 /etc/passwd | tr ':' '<TAB>'<RET>

mona M. Cole

jackie J. Bell

gregh G. Henderson

jas J. Somers

jcd J. Davis

slf S. French

Выводы и Упражнения

Выводы по уроку

команда grep:может использовать символ генерации имен в именах файлов

grep опция -i: игнорирует верхний и нижний регистр
grep опция -c: отображает количество строк, содержащих шаблон
grep опция -v: отображает все строки НЕ соответствующие шаблону
grep опция -n: предваряет каждую найденную строку ее номером
может сочетать опции

команда grep: может также использовать метасимволы в шаблоне

^(крышка):начало строки
$(знак доллара): конец строки

команда grep: может использоваться в конвейере для нахождения определенного шаблона в выводе команды, стоящей в конвейере до нее

редактор sed: редактирует информацию из файла или стандартного ввода

удачная мысль - заключать команду редактора в кавычки
записывает результаты на стандартный вывод
может использовать конвейер

командаsort: может сортировать выбранные поля внутри строки

поле: включает первый пустой символ (пробел или символ табуляции) за которым следует последовательность непустых символов
нумерация полей начинается с 0
sort опция -r: обращает порядок сортированных строк
sort опция -f: игнорирует регистр
sort опция -b (пустой символ): игнорирует первый пустой символ поля и начинает сортировку каждого поля с первого непустого символа
знак плюс
(+): означает "начать с этого поля"
знак минус
(-): означает "закончить перед этим полем"
sort опция -t: выбирает разделитель полей<
заключайте разделитель в скобки

команда cut: выделяет поля(столбцы) данных в файле

записывает поля на стандартный вывод
один символ табуляции: разделитель полей по умолчанию
нумерация полей начинается с 1
cut опция -f: определяет поля для выделения
cut опция -d: выбирает различные разделители полей
если разделитель пробел, следует заключить его в кавычки
cut опция -c: позволяет вам определить список позиций символов

команда paste: сливает линии файла "бок о бок"

символ табуляции: разделитель полей по умолчанию
записывает столбцы на стандартный вывод

команда tee: отображает результаты на стандартном выводе, одновременно перенаправляя их в файл

обычно используется в конвейере
опция
-a: добавляет вывод в конец названного файла

командаtr: транслирует символы

принимает стандартный ввод, производит указанную трансляцию, посылает результаты на стандартный вывод переводит диапазоны символов
следует использовать символ перенаправления и/или конвейер
следует помещать строки в кавычки

Упражнение 5.1.А

А. Установите текущим каталог unit5 в вашем входном каталоге. Каталог unit5 должен содержать файлы friends и parts.

1. Отобразите файл friends. Этот файл содержит информацию о некоторых пользователях системы UNIX. Шесть колонок содержат по порядку: имя пользователя, фамилию, штат, номер телефона, день рождения, почтовый адрес системы UNIX. Колонки отделены друг от друга одним символом табуляции.

2. Используйте команду grep, чтобы подсчитать количество человек с именем nancy в файле friends, не принимая во внимание верхний и нижний регистры.

3. Используйте команду grep, чтобы найти все строки в файле friends, НЕ содержащие имя miller. Используя перенаправление, сохраните эти строки в файле, названном nomiller.

4. Используйте команду grep, чтобы определить номера строк в файле friends, в которых задан штат VT.

5. Используйте команду grep, чтобы найти все строки в файле friends, начинающиеся с буквы C.

6. Используйте потоковый редактор, чтобы удалить первые две строки из файла friends.

7. Используйте потоковый редактор, чтобы заменить имя Boshar на Miller в файле friends.

8. Отсортируйте файл friends по имени.

9. Отсортируйте файл friends по штату в обратном порядке.

10. Отсортируйте файл friends по колонке номеров телефонов, не затрагивая остальные поля в строке.

B. Следующие упражнения используют файл parts в каталоге unit5.

1. Отобразите файл parts. Этот файл содержит описательную информацию о частях. Пять колонок содержат по порядку: номер части, имя части, поставщика, цену части, и количество на складе. Эти колонки отделены друг от друга одним символом табуляции.

2. Используя символ табуляции как разделитель полей, отсортируйте файл parts по поставщикам, не затрагивая оставшиеся поля в строке.

3. Выделите столбец с именем части из файла parts и сохраните этот столбец в файл с именем partname. Отобразите файл partname и убедитесь, что он содержит только имена частей.

4. Выделите номер части, поставщика, цену и количество и сохраните их в файле , названном partinfo.
Отобразите файл partinfo и убедитесь, что он содержит корректную информацию.

5. Слейте файлы partname и partinfo вместе так, чтобы имя части было теперь первым столбцом, а вся остальная информация следовала за ним. Сохраните это в файле названном part2.
Отобразите файл part2 и убедитесь, что он содержит правильную информацию.

C. Следующие упражнения используют файл friends в каталоге unit5.

1. Используя команду tee, выделите фамилию и номер телефона из файла friends, отобразите вывод на экране и одновременно сохраните вывод в файле friends.num.

2. Используя команду tee, выделите почтовый адрес системы UNIX из файла friends и припишите их в файл friends.num, который вы только что создали.

3. Используйте команды cut и tr, чтобы изменить на заглавные (верхний регистр) буквы в имени и фамилии в файле friends.