Linux и UNIX: программирование в shell. Руководство разработчика. - страница 19
>$ 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. Заключение
Метасимволы представляют собой универсальный инструмент поиска строк по шаблону. С их помощью легко находить нужные файлы и каталоги. Далее мы более подробно рассмотрим способы применения метасимволов в составе регулярных выражений.
ГЛАВА 5
Ввод и вывод данных в интерпретаторе 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: