Обзор
`gsub` — это сокращение от Global Substitution, функция, которая заменяет все вхождения определенного регулярного выражения на указанную строку в скрипте `awk`. В отличие от функции `sub`, которая заменяет только первое вхождение, `gsub` заменяет все вхождения.
Синтаксис функции gsub
gsub(регулярное_выражение, строка_замены, [строка_цели])
- Регулярное выражение (regex): Регулярное выражение, определяющее шаблон для поиска.
- Строка замены (replacement): Строка, на которую будет заменен найденный шаблон.
- Строка цели (target_string): Строка, в которой будет выполнена операция замены. Если опущено, применяется ко всей текущей записи ($0).
Возвращаемое значение
Функция `gsub` возвращает количество произведенных замен в виде целого числа. Это возвращаемое значение может быть полезно в условных операторах и т.д.
Примеры использования
Различные примеры замены строк с использованием функции `gsub`.
Замена всех 'old' на 'new' в файле
echo 'This is an old file with old data.' > data.txt
awk '{gsub(/old/, "new"); print}' data.txt
Изменяет все вхождения слова 'old' на 'new' в файле data.txt. Выводит измененное содержимое.
Замена пробелов на дефисы
echo 'Hello World from Awk' | awk '{gsub(/ /, "-"); print}'
Изменяет все пробелы во входной строке на дефисы (-).
Замена только в определенном поле
echo 'field1 field2 apple' | awk '{gsub(/a/, "X", $3); print}'
Заменяет 'a' на 'X' только в третьем поле ($3). (Пример: 'apple banana cat' -> 'apple banana cXt')
Замена без учета регистра
echo 'Apple is an apple.' | awk 'BEGIN {IGNORECASE=1} {gsub(/apple/, "orange"); print}'
Устанавливает переменную `IGNORECASE` в 1, чтобы заменить 'apple' на 'orange' без учета регистра.
Удаление только цифр
echo 'Product ID: 12345 ABC' | awk '{gsub(/[0-9]/, ""); print}'
Удаляет все цифры из строки.
Советы и примечания
Полезные советы и моменты, на которые следует обратить внимание при использовании функции `gsub`.
Отличие от функции sub
`gsub` заменяет все вхождения, тогда как функция `sub` заменяет только первое вхождение. Выбирайте соответствующую функцию в зависимости от ваших потребностей.
- `gsub(regex, replacement, target)`: Замена всех вхождений
- `sub(regex, replacement, target)`: Замена только первого вхождения
Специальные символы регулярных выражений
Чтобы использовать специальные символы, такие как `.`, `*`, `+`, `?`, `[`, `]`, `(`, `)`, `|`, `^`, `$`, `\` в регулярном выражении как литералы, их необходимо экранировать с помощью `\`. Например, чтобы найти фактическую точку (.), используйте `\.`.
Внимание при опущении строки цели
Если `target_string` опущено, по умолчанию операция замены применяется ко всей текущей записи ($0). Чтобы применить ее только к определенному полю, обязательно укажите поле в формате `gsub(regex, replacement, $N)`.
Обратная косая черта в строке замены
Обратная косая черта (`\`) в строке замены может иметь особое значение. Например, `\&` представляет собой всю совпавшую строку. Чтобы использовать литеральную обратную косую черту, ее необходимо экранировать дважды, например, `\\`.