Главная > Обработка текста и поиск > awk-gsub

awk-gsub: Глобальная замена строк

Функция `gsub` в команде awk используется для глобальной замены всех вхождений определенного регулярного выражения на другую строку. Это очень полезно при пакетном изменении шаблонов, которые появляются многократно в содержимом файлов или потоках.

Обзор

`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)`.

Обратная косая черта в строке замены

Обратная косая черта (`\`) в строке замены может иметь особое значение. Например, `\&` представляет собой всю совпавшую строку. Чтобы использовать литеральную обратную косую черту, ее необходимо экранировать дважды, например, `\\`.


Те же команды в категории