Основы программирования в Linux, стр. 34
Все это выглядит немного запутанно, но если осваивать все возможности постепенно, то вы увидите, что все не так сложно, как кажется на первый взгляд. Самый легкий способ понять регулярные выражения — просто попробовать применить несколько.
1. Начнем с поиска строк, заканчивающихся буквой "е". Возможно, вы уже догадались, что нужно использовать специальный символ
$$ <b>grep e$ words2.txt</b>Art thou not, fatal vision, sensibleI see thee yet, in form as palpableNature seems dead, and wicked dreams abuse$Как видите, найдены строки, заканчивающиеся буквой "е".
2. Теперь найдите трехбуквенные слова, начинающиеся с символов "Th". В данном случае вам понадобится шаблон
[[:space:]].$ <b>grep Th.[[:space:]] words 2.txt</b>The handle toward my hand? Come, let me clutch thee.The curtain'd sleep; witchcraft celebratesThy very stones prate of my whereabout,$3. В заключение примените расширенный режим поиска в команде
grep$ <b>grep -Е [a-z]\{10\} words2.txt</b>Proceeding from the heat-oppressed brain?And such an instrument I was to use.The curtain'd sleep; witchcraft celebrateshy very stones prate of my whereabout,$Приведенные примеры лишь коснулись наиболее важных компонентов регулярных выражений. Как и для большинства составных частей ОС Linux, существует множество дополнительной документации помимо этой книги, которая поможет вам узнать еще больше подробностей, но лучший способ изучения регулярных выражений — экспериментировать с ними.
Выполнение команд
При написании сценариев вам часто требуется перехватить результат выполнения команды для использования его в сценарии командной оболочки; т.е. вы хотите выполнить команду и поместить ее вывод в переменную.
Сделать это можно с помощью синтаксической конструкции
$(<i>команда</i>)set`<i>команда</i>`В более раннем варианте конструкции применяется обратный апостроф или обратная кавычка (
`'Во всех современных сценариях следует применять конструкцию выполнения или подстановки команды
$(<i>команда</i>)$'\`...`\Результат выполнения конструкции
$(<i>команда</i>)#!/bin/shecho The current directory is $PWDecho The current users are $(who)exit 0Поскольку текущий каталог — это переменная окружения командной оболочки, первая строка не нуждается в применении подстановки команды. Результат выполнения программы
whoЕсли вы хотите поместить результат в переменную, то можете просто присвоить его обычным образом:
whoisthere=$(who)echo SwhoisthereВозможность поместить результат выполнения команды в переменную сценария — очень мощное средство, поскольку оно облегчает использование существующих команд в сценариях и перехват результата их выполнения. Если когда-нибудь вам понадобится преобразовать набор параметров, представляющих собой вывод команды на стандартное устройство вывода, и передать их как аргументы в программу, возможно, вас порадует то, что команда
xargsИногда возникают проблемы, если команда, которую вы хотите выполнить, выводит несколько пробелов перед нужным вам текстом, или больше информации, чем вам нужно. В таких случаях можно воспользоваться командой
setМы уже использовали команду
exprexprСовременная и лучшая альтернатива — синтаксическая конструкция
$((...))#!/bin/shх=0while [ "$х" -ne 10 ]; do echo $х х=$(($x+1))doneexit 0Обратите внимание на тонкое отличие приведенной подстановки от команды
х=$(...)