expand
, unexpandКоманда expand
преобразует символы табуляции в пробелы. Часто используется в конвейерной обработке текста.Команда unexpand
преобразует пробелы в символы табуляции. Т.е. она является обратной по отношению к команде expand.cut
Предназначена для извлечения отдельных полей из текстовых файлов. Напоминает команду print $N
в awk, но более ограничена в своих возможностях. В простейших случаях может быть неплохой заменой awk в сценариях. Особую значимость, для команды cut, представляют ключи -d (разделитель полей) и -f (номер(а) поля(ей)).Использование команды cut
для получения списка смонтированных файловых систем:cat /etc/mtab | cut -d ' ' -f1,2
Использование команды cut
для получения версии ОС и ядра:uname -a | cut -d" " -f1,3,11,12
Использование команды cut
для извлечения заголовков сообщений из электронных писем:bash$
grep '^Subject:' read-messages | cut -c10-80Re: Linux suitable for mission-critical apps?
MAKE MILLIONS WORKING AT HOME3
Spam complaint
Re: Spam complaint
Использование команды cut
при разборе текстового файла:# Список пользователей в /etc/passwd.
FILENAME=/etc/passwd
for user in $(cut -d: -f1 $FILENAME)
do
echo $user
done
# Спсибо Oleg Philon за этот пример.
cut -d ' ' -f2,3 filename
эквивалентно awk -F'[ ]' '{ print $2, $3 }' filenameСм. также Пример 12-33.
paste
Используется для объединения нескольких файлов в один многоколоночный файл.
join
Может рассматриваться как команда, родственная команде paste
. Эта мощная утилита позволяет объединять два файла по общему полю, что представляет собой упрощенную версию реляционной базы данных.Команда join
оперирует только двумя файлами и объедияет только те строки, которые имеют общее поле (обычно числовое), результат объединения выводится на stdout. Объединяемые файлы должны быть отсортированы по ключевому полю.File: 1.data
100 Shoes
200 Laces
300 Socks
File: 2.data
100 $40.00
200 $1.00
300 $2.00
bash$
join 1.data 2.dataFile: 1.data 2.data
100 Shoes $40.00
200 Laces $1.00
300 Socks $2.00
На выходе ключевое поле встречается только один раз.
head
Выводит начальные строки из файла на stdout
(по-умолчанию -- 10 строк, но это число можно задать иным). Эта команда имеет ряд интересных ключей.Пример 12-9. Какие из файлов являются сценариями?
#!/bin/bash
# script-detector.sh: Отыскивает файлы сценариев в каталоге.
TESTCHARS=2 # Проверяются первые два символа.
SHABANG='#!' # Сценарии как правило начинаются с "sha-bang."
for file in * # Обход всех файлов в каталоге.
do
if [[ `head -c$TESTCHARS "$file"` = "$SHABANG" ]]
# head -c2 #!
# Ключ '-c' в команде "head" выводит заданное
#+ количество символов, а не строк.
then
echo "Файл \"$file\" -- сценарий."
else
echo "Файл \"$file\" не является сценарием."
fi
done
exit 0
Пример 12-10. Генератор 10-значных случайных чисел
#!/bin/bash
# rnd.sh: Генератор 10-значных случайных чисел
# Автор: Stephane Chazelas.
head -c4 /dev/urandom | od -N4 -tu4 | sed -ne '1s/.* //p'
# =================================================================== #
# Описание
# --------
# head:
# -c4 -- первые 4 байта.
# od:
# -N4 ограничивает вывод 4-мя байтами.
# -tu4 беззнаковый десятичный формат вывода.
# sed:
# -n, в комбинации с флагом "p", в команде "s",
# выводит только совпадающие с шаблоном строки.