Знак вопроса служит для замены любого отдельного символа. Следующая команда выводит список файлов, имена которых содержат не менее трех символов, причем третьим является символ 'R':
$ ls ??R*
BAREAD
Следующая команда ищет файлы с именами, начинающимися со строки "conf", за которой следуют два произвольных символа и расширение log:
$ ls conf??.log .
confl2.log conf.2.log
conf25.log
Вот как можно найти файлы, имена которых состоят не менее чем из четырех символов, причем первым является символ 'f', а последним — 's':
$ ls f??*s
ftpaccess ftphosts ftpconversions ftpusers ftpgroups
4.3. Применение метасимволов […] и [!…]
Метасимволы [… ] соответствуют любому символу из числа тех, что указаны в квадратных скобках. Представленная ниже команда выводит список файлов, имена которых начинаются с символа 'i' или 'o':
$ ls [io]*
inetd.conf ioctl.save outputrc
info-dir inputrc
initrunlvl issue
inittab issue.net
В скобках можно задавать диапазон символов. Начальный и конечный символы при этом разделяются дефисом. Например, следующая команда ищет файлы с именем log, в расширении которых первый символ — цифра:
$ ls log.[0-9]*
log.0323 log.0325 log.0324 log.0326
Метасимволы [!…] соответствуют любому символу из числа тех, что не указаны
в квадратных скобках. Если в предыдущем примере на первом месте в скобках поставить восклицательный знак, команда будет искать файлы с именами log, в расширении которых первый символ не является цифрой: '
$ ls log.[!0-9]*
log.sybase
Приведенная ниже команда ищет файлы, имена которых начинаются со строки "LPS", два следующих символа могут быть произвольными, затем идет символ, не являющийся цифрой, а за ним — произвольная строка:
$ ls LPS??[!0-9]*
LPSILP LPSOSI LPSOPS LPSPOPQTR
Поиск файлов, имена которых начинаются с символа верхнего регистра, производится посредством такой команды:
$ ls [A-Z]*
Следующая команда ищет файлы, имена которых, наоборот, начинаются с символа нижнего регистра:
$ 1а [а–z]*
А эта команда находит файлы, в начале имени которых стоит цифра:
$ ls [0-9]*
Вот как можно найти все скрытые файлы (такие как .profile, .rhosts, .history и т. д.):
$ ls .*
4.4. Заключение
Метасимволы представляют собой универсальный инструмент поиска строк по шаблону. С их помощью легко находить нужные файлы и каталоги. Далее мы более подробно рассмотрим способы применения метасимволов в составе регулярных выражений.
Ввод и вывод данных в интерпретаторе shell
Команды и сценарии могут получать входные данные двумя способами: из стандартного входного потока (связан с клавиатурой) или из файла. Аналогичное разделение существует и при выводе данных: результаты работы команды или сценария по умолчанию направляются на экран терминала, но можно перенаправить их в файл. Если в процессе работы возникают ошибки, сообщения о них тоже отображаются на экране. Чтобы избежать этого, нужно перенаправить поток ошибок в файл.
В этой главе рассматриваются следующие темы:
• работа со стандартными потоками ввода, вывода и ошибок;
• переадресация ввода и вывода.
5.1. Команда echo
Команда echo отображает на экране указанную строку текста. Общий ее формат таков:
echo строка
В строке могут встречаться различные управляющие символы, ниже перечислены основные из них: \c запрет отображения концевого символа новой строки \f прогон страницы \n новая строка \t горизонтальная табуляция
Например, если указать управляющий символ \с, то по завершении вывода не будет осуществлен переход в новую строку:
$ echo "Как вас зовут?\t\c"
Как вас зовут? $
Здесь $ -cимвол приглашения.
По умолчанию подразумевается, что в конце строки находится символ новой строки:
$ echo "Как вас зовут?"
Как вас зовут? $
В строке можно вычислять значения переменных интерпретатора shell и даже других команд. Например, следующая команда сообщает о том, каков начальный каталог текущего пользователя (переменная среды $номе) и к какому терминалу он подключен (команда tty заключена в обратные кавычки, чтобы интерпретатор shell поместил в строку результат ее выполнения):
$ echo "Ваш начальный каталог $HOME, вы подключены к терминалу `tty`"
Ваш начальный каталог /home/dave, вы подключены к терминалу /dev/ttyp1
В Linux…
Чтобы запретить вывод символа новой строки, укажите опцию -n:
$ echo -n "Как вас зовут?"
Управляющие символы по умолчанию не распознаются. Чтобы активизировать их, задайте опцию -e:
$ echo -e "Как вас зовут?\t\c"
Как вас зовут? $
Для вывода дополнительных пустых строк используйте управляющий символ \n:
$ echo "Выводим 3 пустые строхи\n\n\nОК"
Выводим 3 пустые строки
OK
В любом месте строки можно размещать символы табуляции:
$ echo "Один символ табуляции\tДве табуляции\t\tOK"
Один символ табуляции Два символа табуляции ОК
Чтобы перенаправить результаты работы команды echo в файл, воспользуйтесь оператором '>':
$ echo "Строка занесена в файл." > myfile
В этом случае содержимое файла myfile будет заменено. Существует также оператор '>>', который позволяет добавить строку в конец файла: