# Linux HowTo (як зробити)
# Книги та керівництва
# Матеріали англійською мовою
6.16. Спеціальні символи
6.16.1. Метасимвол. (крапка)
Залежно від контексту символ "." має кілька значень. lin У лівій частині команди підстановки і при пошуку за допомогою конструкції "/. /" символ "." означає будь-який одиночний символ. Таким чином, в результаті пошуку будуть знайдені рядки тексту, що містять символи "x" і "y", між якими знаходиться будь-який символ, наприклад:
Символ ".", Який використовується для вказівки номера рядка позначає поточний рядок.
Приклади. заміна символу "a" на символ "," в рядку, наступного за поточним. Символ ".", Записаний в правій частині команди заміни "s", не має спеціального значення; заміна символу "," на символ "." в рядках з 1-го по 5-у включно.
Команда. ілюструє всі значення символу ".". Перша "." в команді - це номер поточного рядка, друга "." це метасимвол, який відповідає будь-якому одному символу цього рядка, третя "." - це справжня точка в команді заміни.
Така команда, застосована, наприклад до рядка: дає результат:
6.16.2. Метасимвол \ (зворотна дробова риса)
Зворотній подрібнена риса (або зворотний слеш) скасовує спеціальне значення, яке може мати наступний за нею символ, зокрема, "\." означає точку, а не "будь-який символ". Приклади. заміна символу "." на символ "?"; пошук рядків, що містять ".pp"; пошук символу ""; пошук символу "/"; видалення в поточному рядку послідовності символів ".".
Для поділу полів в команді "s" може використовуватися будь-який символ, а не тільки дрібна риса (проте для контекстного пошуку потрібно використовувати дробову риску). Наприклад, якщо рядок вже містить багато символів дробової риси, як в рядку: то можна використовувати в якості роздільників символ ":" (двокрапка). Видалити всі символи дробової риси можна за допомогою команди:
Якщо для стирання символів і видалення рядків використовуються клавіші "#" і "@", їх потрібно вводити у вигляді "\ #" і "\ @" (це стосується не тільки до роботи з ed).
Якщо текст вводиться за допомогою однієї з команд: "a", "i" або "c", то символ зворотної дробової риси не є спеціальним, і потрібно натискати цю клавішу тільки один раз для кожної зворотної дробової риси.
6.16.3. Метасимвол $ (грошовий знак)
Залежно від того, як використовується знак грошової одиниці ($), він може позначати кінець файлу або кінець рядка. Коли вказується діапазон (від рядка 1 до рядка $), абсолютно ясно, що мова йде про кінець файлу. "1, $ p" викличе роздруківку всього файлу. Але запис "s /$/./ p" вказує, що точка буде поміщена в кінці поточного рядка.
У команді: перший символ "$" означає останній рядок файлу, другий означає кінець цього рядка, а третій дійсно є символом грошової одиниці, який додається до зазначеної рядку.
6.16.4. Метасимвол ^ (заперечення)
Метасимвол "^" застосовується так само, як метасимвол "$", за винятком того, що він вказує початок рядка, а не кінець.
Приклади. пошук рядка, що починається зі слова "час"; помістити пробіл в початок поточного рядка.
Метасимволи можна об'єднувати. Наприклад, для того, щоб знайти рядок, що містить тільки символи "pp" можна використовувати команду: /^.pp$/
6.16.5. Метасимвол * (зірочка)
Метасимвол "*" означає, що символ, за яким він слідує, може повторюватися довільне число раз.
Якщо в тексті є велика кількість прогалин, їх можна стиснути, наприклад: В результаті виконання команди: отримаємо:
Якщо скомбінувати точку і *, то можна зіставити всі символи. За допомогою цієї комбінації можна, наприклад, замінити всі символи в останній частині рядка: ed автоматично реєструються останній рядок символів в шаблоні пошуку або замінений текст. Однак ви повинні підказати ed, що потрібно повторити заміну, використовуючи знак "%". Знак "%" дозволяє вам зробити однакову заміну в багатьох рядках, не використовуючи глобальної заміни. Наприклад, замінимо слово money на слово gold, повторимо останню заміну в рядках від 1 до 3:
ed автоматично реєструються слово money, так що рядок не буде повторена між першими двома обмежувачами. Знак "%" говорить ed - використовувати останній шаблон для заміни (gold).
6.16.6. Метасимволи [] (квадратні дужки)
Метасимволи "[]" дозволяють визначити підмножина символів, які необхідно розпізнавати при виконанні операції пошуку або підстановки. Запис групи символів, укладених в квадратні дужки, означає: "будь-який одиночний символ із зазначених". Наприклад, якщо "[0123456789]", це буде означати: "будь-яка цифра". Можна записати і коротше: "[0-9]". Запис двох символів, розділених знаком мінус, означає завдання інтервалу в
лексикографічної послідовності символів. Так, запис "[А-Я]" означає: "прописна російська буква", а запис: "[a-z] [a-z0-9] *" означає послідовність латинських букв і цифр, що починається з букви.
Вказівка на початку класу символу "^" означає "ні один з наступних символів". Наприклад: позначає "будь-який символ, за винятком цифри".
Приклади. видалення всіх цифр на початку кожного рядка; пошук першого рядка, що не починається символом пробілу або табуляції.
Усередині класу символів можуть бути присутніми будь-які символи і, щоб уникнути плутанини, в квадратних дужках символи принципово не мають спеціального значення. Наприклад, щоб знайти спеціальні символи, можна використовувати команду: Всередині "[.]" Символ "[" не є спеціальним. Щоб включити символ "]" в клас символів, потрібно вказати його першим.
6.16.7. метасимвол (Амперсенд)
Символ "" використовується в першу чергу для скорочення тексту, що вводиться.
Припустимо, є рядок: і Ви бажаєте перевести її в рядок: звичайно, для цього можна скористатися командою: однак вимога повторно вказувати слово "ЧАС" здається нерозумним. Для того, щоб уникнути цього повторення, використовується символ "". У правій частині команди підстановки амперсенд означає "знайдений текст", так що можна ввести команду: де "" буде означати "ЧАС". Звичайно, в даному прикладі економія буде незначною, проте якщо кількість символів велике або є щось на кшталт ". *", Якому відповідав би великий шматок тексту, економиться багато символів. Знижується також ймовірність здійснення помилки при введенні замінює тексту. Наприклад, для того, щоб укласти в дужки рядок, незалежно від її довжини, можна використовувати команду:
Амперсенд може зустрічатися в правій частині команди кілька разів. Команда: побудує рядок: а команда: перетворює вихідну рядок в:
Щоб отримати справжній символ "", використовується зворотна дробова риса для скасування його спеціального значення. Команда: замінить слово "амперсенд" на символ "". Зверніть увагу на те, що символ "" є спеціальним тільки в правій частині команди, в лівій частині він не має спеціального значення.