Раздел 5
НЕСКОЛЬКО ПОЛЕЗНЫХ КОМАНД ОС UNIX
Обзор
Несколько команд ОС UNIX являются очень полезными инструментами. В этом разделе говорится об использовании команд grep и sort с файлами и конвейерами. Здесь также обсуждается потоковый редактор - средство редактирования файла из командной строки. Затем описывается, как разделить или объединить колонки данных. После этого объясняется, как можно направить результат выполнения команды одновременно в файл и на терминал с помощью команды tee. Наконец обсуждается команда перекодировки символов tr.
ЦЕЛИ
Поиск в файле с помощью команды grep.
В уроке 3 раздела 1, вы использовали команду
grep для поиска в файле по шаблону. Формат команды grep:grep
-опции шаблон_поиска имя_файла(ов)Вы можете также использовать символы генерации в именах файлов. Если система находит строки в нескольких файлах, то она отображает каждую найденную строку с указанием имени соответствующего файла в начале строки. См. пример 1.
Опции, используемые командой
grepВы можете применять одну или более из этих опций с командой
grep : Опция -i игнорирует различие верхнего и нижнего регистров. Опция -c отображает число строк, содержащих шаблон поиска. Опция -l сообщает только имена файлов содержащих шаблон. Опция -v отображает все строки НЕ соответствующие шаблону. Опция -n предваряет каждую найденную строку номером строки.Для получения полного списка опций, используемых командой
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. Первая строка сообщает общее количество блоков, что не нужно многим пользователям.ПОТОКОВЫЙ РЕДАКТОР
sedsed 'команда редактора' файл
ПРИМЕР 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 выделяет только первое поле , которое содержит только входные имена пользователей системы.ВЫДЕЛЕНИЕ СТОЛБЦОВ С ИСПОЛЬЗОВАНИЕМ
cutcut -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 файл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 [-опция] имя_файла
ПРИМЕР 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
состоит из заменяющих символов.Команда
tr берет каждый символ из строки1 и заменяет его на соответствующий ему заменяющий символ из строки2.Команда
tr также транслирует диапазоны символов. Если вы хотите транслировать буквы нижнего регистра в буквы верхнего регистра в файле, используйте следующий формат:tr '[a-z]' '[A-Z]'
< имя файлаОСТОРОЖНО: Вы должны использовать символ перенаправления < и/или конвейера, чтобы система не использовала имя файла по умолчанию.
Размещайте строки в кавычках, чтобы shell не интерпретировал специальные символы (метасимволы). См. пример 1.
В примере 2 команда
cut выделяет поля 1 и 5 из файла /etc/passwd. Ее вывод связывается в канал с командой 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
Выводы по уроку
Упражнение 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.5. Слейте файлы
partname и partinfo вместе так, чтобы имя части было теперь первым столбцом, а вся остальная информация следовала за ним. Сохраните это в файле названном part2.C. Следующие упражнения используют файл
friends в каталоге unit5.1. Используя команду
tee, выделите фамилию и номер телефона из файла friends, отобразите вывод на экране и одновременно сохраните вывод в файле friends.num.2. Используя команду
tee, выделите почтовый адрес системы UNIX из файла friends и припишите их в файл friends.num, который вы только что создали.3. Используйте команды
cut и tr, чтобы изменить на заглавные (верхний регистр) буквы в имени и фамилии в файле friends.