Введение / Зачем это нужно
Обработка текста — повседневная задача для системных администраторов и разработчиков. Linux предоставляет два мощных инструмента для работы с текстом: AWK и SED. AWK excels в анализе полей и вычислениях, а SED shines в быстром редактировании строк. В этом гайде вы узнаете, как использовать обе утилиты для массового редактирования, фильтрации и преобразования файлов. После выполнения инструкции вы сможете автоматизировать повседневные операции с текстом с помощью простых команд в терминале.
Требования / Подготовка
- Дистрибутив Linux (Ubuntu, Debian, CentOS и другие).
- Доступ к терминалу с правами чтения/записи в целевых каталогах.
- Утилиты
awkиsed(обычно уже установлены). - Пример файлов для практики:
log.txt,data.txt,input.txt.
Если какие-то утилиты отсутствуют, установите их:
# Для Debian/Ubuntu
sudo apt-get install gawk sed
# Для CentOS/RHEL
sudo yum install gawk sed
Пошаговая инструкция
Шаг 1: Установите необходимые инструменты
Проверьте, что инструменты уже присутствуют:
awk --version
sed --version
Если вывод показывает версию, вы готовы продолжать. В противном случае установите пакеты, как описано выше.
Шаг 2: Замена текста с помощью sed
SED — идеальный выбор для быстрой замены текста.
# Редактирует файл напрямую
sed -i 's/error/ok/g' log.txt
# Показать результат без изменения исходного файла
sed 's/error/ok/g' log.txt
💡 Совет: Флаг
-iредактирует файл на месте. На macOS синтаксис может отличаться (sed -i ''). Проверьтеman-page, если команда работает некорректно.
Шаг 3: Фильтрация строк с помощью awk
AWK позволяет фильтровать строки на основе шаблонов или значений полей.
# Вывести только строки, содержащие слово warning
awk '/warning/ {print}' log.txt
# Вывести строку вместе с номером строки
awk '/warning/ {print NR ": " $0}' log.txt
Шаг 4: Удаление пустых строк с помощью sed
Удалите все пустые строки и сохраните результат:
sed '/^$/d' data.txt > cleaned.txt
:
Шаг 5: Комбинированный пример: фильтрация и замена
Выполните сразу несколько операций: фильтрация, замена и запись в новый файл.
awk '{if (length($0) > 0) {sub(/foo/, "bar"); print}}}' input.txt > output.txt
Команда проверяет длину строки, выполняет замену foo на bar и выводит непустые строки.
Шаг 6: Сохранение результата и проверка
Убедитесь, что результат соответствует ожиданиям:
# Первые 10 строк результата
cat output.txt | head -n 10
# Количество строк в файле
wc -l output.txt
⚠️ Важно: Если файл
output.txtуже существовал, командаawkперезапишет его. Используйте резервные копии, если нужно сохранить исходные данные.
Проверка результата
После выполнения всех шагов проверьте, что операции выполнены корректно:
- В
log.txtдолжны появиться заменённые значенияok. - Вывод
awk '/warning/ …'должен содержать только строки со словомwarning. cleaned.txtне должен содержать пустых строк.output.txtдолжен содержать строки безfooи с заменённымиbar.
Возможные проблемы
| Симптом | Причина | Решение |
|---|---|---|
sed: command not found | Утилита SED отсутствует | Установите пакет sed (apt-get install sed или yum install sed) |
awk: command not found | AWK отсутствует | Установите gawk (apt-get install gawk) |
| Замена не применяется | Ошибка в регулярном выражении | Проверьте шаблон: s/old/new/ ; используйте кавычки правильно |
| Пустые строки не удаляются | Неверный шаблон | Используйте sed '/^$/d' (точка в начале и конце) |
awk: cmd. number out of range | Превышение диапазона полей | Используйте $0 для всей строки или увеличьте FS если нужно больше полей |
| Нет доступа к файлу | Недостаточно прав | Запустите команду с sudo или измените права (chmod) |
sed -i не работает на macOS | Другой синтаксис | Используйте sed -i '' 's/old/new/g' |
Теперь у вас есть полный набор команд для повседневной обработки текста в Linux. Экспериментируйте, комбинируйте и создавайте собственные скрипты для автоматизации рутинных задач.