АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Метасимвол . (точка)

Читайте также:
  1. Алфавит языка и типы данных
  2. Библиографический аппарат и правила библиографического описания документов
  3. Вопрос 1. Технологический выбор в экономике и граница производственных возможностей. Кривая производственных возможностей и понятие альтернативной стоимости (графический анализ)
  4. Горный туризм и альпинизм 3 страница
  5. Дозапись текста
  6. Квантовая механика, атомная и ядерная физика
  7. Кодирование целых и действительных чисел
  8. Краткий обзор команд
  9. Лабораторная работа №4
  10. Происхождение ПИСЬМА

В зависимости от контекста символ "." имеет несколько значений. lin В левой части команды подстановки и при поиске с помощью конструкции "/.../" символ "." означает любой одиночный символ. Таким образом, в результате поиска

/x.y/

будут найдены строки текста, содержащие символы "x" и "y", между которыми находится любой символ, например:

x+y x-y x y

Символ ".", используемый для указания номера строки обозначает текущую строку.

Примеры.

.+1s/a/,/

замена символа "a" на символ "," в строке, следующей за текущей. Символ ".", записанный в правой части команды замены "s", не имеет специального значения;

1, 5s/,/./

замена символа "," на символ "." в строках с 1-й по 5-ю включительно.

Команда:

.s/././

иллюстрирует все значения символа ".". Первая "." в команде - это номер текущей строки, вторая "." это метасимвол, который соответствует любому одному символу данной строки, третья "." - это настоящая точка в команде замены.

Такая команда, примененная, например к строке:

ОШИБКА ЧТЕНИЯ.

дает результат:

ОШИБКА ЧТЕНИЯ.

6.16.2. Метасимвол \ (обратная дробная черта)

Обратная дробная черта (или обратный слэш) отменяет специальное значение, которое может иметь следующий за ней символ, в частности, "\." означает точку, а не "любой символ". Примеры.

s/\./?/

замена символа "." на символ "?";

/\.pp/

поиск строк, содержащих ".pp";

/\/

поиск символа "\";

/\//

поиск символа "/";

s/\\\.//

удаление в текущей строке последовательности символов ".".

Для разделения полей в команде "s" может использоваться любой символ, а не только дробная черта (однако для контекстного поиска требуется использовать дробную черту). Например, если строка уже содержит много символов дробной черты, как в строке:

//exec//sys.fort.go //etc...

то можно использовать в качестве разделителей символ ":" (двоеточие). Удалить все символы дробной черты можно с помощью команды:

s:/::g

Если для стирания символов и удаления строк используются клавиши "#" и "@", их нужно вводить в виде "\#" и "\@" (это относится не только к работе с ed).

Если текст вводится с помощью одной из команд: "a", "i" или "c", то символ обратной дробной черты не является специальным, и требуется нажимать эту клавишу только один раз для каждой обратной дробной черты.

6.16.3. Метасимвол $ (денежный знак)

В зависимости от того, как используется знак денежной единицы ($), он может обозначать конец файла или конец строки. Когда указывается диапазон (от строки 1 до строки $), совершенно ясно, что речь идет о конце файла. "1, $p" вызовет распечатку всего файла. Но запись "s/$/./p" указывает, что точка будет помещена в конце текущей строки.

В команде:

$s/$/$

первый символ "$" означает последнюю строку файла, второй означает конец этой строки, а третий действительно является символом денежной единицы, который добавляется к указанной строке.

6.16.4. Метасимвол ^ (отрицание)

Метасимвол "^" применяется так же, как метасимвол "$", за исключением того, что он указывает начало строки, а не конец.

Примеры.

/^время/

поиск строки, начинающейся со слова "время";

s/^/ /

поместить пробел в начало текущей строки.

Метасимволы можно объединять. Например, для того, чтобы найти строку, содержащую только символы "pp" можно использовать команду: /^.pp$/

6.16.5. Метасимвол * (звездочка)

Метасимвол "*" означает, что символ, за которым он следует, может повторяться произвольное число раз.

Если в тексте имеется большое количество пробелов, их можно сжать, например:

Московское время 18 часов

В результате выполнения команды:

s/e *время 1/e время 1/p

получим:

Московское время 18 часов

Если скомбинировать точку и *, то можно сопоставить все символы. С помощью этой комбинации можно, например, заменить все символы в последней части строки:

p<CR> Toads are alimy, cold creatures s/are.*/are wonderful and warm <CR> Toads are wonderful and warm

ed автоматически запоминает последнюю строку символов в шаблоне поиска или замененный текст. Однако вы должны подсказать ed, что нужно повторить замену, используя знак "%". Знак "%" позволяет вам сделать одинаковую замену во многих строках, не используя глобальной замены. Например, заменим слово money на слово gold, повторим последнюю замену в строках от 1 до 3:

1, $n<CR> 1 I love money 2 I need food 3 I use money 4 The IRS wants my money ls/money/gold<CR> I love gold 3s//g<CR> I use gold 1, $n<CR> 1 I love gold 2 I need food 3 I use gold 4 The IRS wants my money

ed автоматически запоминает слово money, так что строка не будет повторена между первыми двумя ограничителями. Знак "%" говорит ed - использовать последний шаблон для замены (gold).

6.16.6. Метасимволы [] (квадратные скобки)

Метасимволы "[]" позволяют определить подмножество символов, которые необходимо распознавать при выполнении операции поиска или подстановки. Запись группы символов, заключенных в квадратные скобки, означает: "любой одиночный символ из указанных". Например, если "[0123456789]", это будет означать: "любая цифра". Можно записать и короче: "[0-9]". Запись двух символов, разделенных знаком минус, означает задание интервала в

лексикографической последовательности символов. Так, запись "[А-Я]" означает: "прописная русская буква", а запись: "[a-z] [a-z0-9]*" означает последовательность латинских букв и цифр, начинающуюся с буквы.

Указание в начале класса символа "^" означает "ни один из следующих символов". Например:

^[0-9]

обозначает "любой символ, за исключением цифры".

Примеры.

1, $s/^[0-9]*//

удаление всех цифр в начале каждой строки;

/^[^(пробел)(табуляция)]/

поиск первой строки, не начинающейся символом пробела или табуляции.

Внутри класса символов могут присутствовать любые символы и, чтобы избежать путаницы, в квадратных скобках символы принципиально не имеют специального значения. Например, чтобы найти специальные символы, можно использовать команду:

/[.[]/

Внутри "[...]" символ "[" не является специальным. Чтобы включить символ "]" в класс символов, нужно указать его первым.

6.16.7. Метасимвол & (амперсенд)

Символ "&" используется в первую очередь для сокращения вводимого текста.

Предположим, имеется строка:

В ЭТО ВРЕМЯ

и требуется преобразовать ее в строку:

В ЭТО ВРЕМЯ СУТОК

конечно, для этого можно воспользоваться командой:

s/ВРЕМЯ/ВРЕМЯ СУТОК/

однако требование повторно указывать слово "ВРЕМЯ" кажется неразумным. Для того, чтобы избежать этого повторения, используется символ "&". В правой части команды подстановки амперсенд означает "найденный текст", так что можно ввести команду:

s/ВРЕМЯ/& СУТОК/

где "&" будет означать "ВРЕМЯ". Конечно, в данном примере экономия будет незначительной, однако если количество символов велико или представляет собой нечто вроде ".*", которому соответствует большой кусок текста, экономится много вводимых символов. Снижается также вероятность совершения ошибки при вводе заменяющего текста. Например, для того, чтобы заключить в скобки строку, независимо от ее длины, можно использовать команду:

s/.*/(&)/

Амперсенд может встречаться в правой части команды несколько раз. Команда:

s/ВРЕМЯ/& СУТОК И & ГОДА/

построит строку:

ВРЕМЯ СУТОК И ВРЕМЯ ГОДА

а команда:

s/В ЭТО ВРЕМЯ/&? &!!!/

преобразует исходную строку в:

В ЭТО ВРЕМЯ? В ЭТО ВРЕМЯ!!!

Чтобы получить настоящий символ "&", используется обратная дробная черта для отмены его специального значения. Команда:

s/амперсенд/\&/

заменит слово "амперсенд" на символ "&". Обратите внимание на то, что символ "&" является специальным только в правой части команды, в левой части он не имеет специального значения.

 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.)