Шпаргалка по обработке текста в Linux
Вы смотрите на лог-файл размером 2 ГБ в поисках неудачных API-вызовов за последний час. Или вам нужно извлечь email-адреса из CSV-экспорта. Эти задачи не должны требовать написания Python-скрипта.
Эта шпаргалка охватывает основные команды Linux для обработки текста — grep, awk, sed и их современные аналоги — с практическими примерами для повседневных задач frontend и full-stack разработки.
Ключевые моменты
grepиripgrep— ваши основные инструменты для поиска текста в файлах, причём ripgrep обеспечивает прирост скорости и учитывает.gitignoreдля больших кодовых баз.sedвыполняет потоковые операции поиска и замены, но следите за различиями в поведении между версиями GNU и BSD.awkпревосходно справляется с обработкой столбцов в логах, CSV и других структурированных текстах.jqзаполняет пробел, который оставляютgrepиawkпри работе с JSON-данными.- Оператор конвейера (
|) — это связующее звено, которое объединяет эти команды в мощные композируемые конвейеры.
Основные команды поиска: grep и ripgrep
grep ищет шаблоны в файлах и выводит совпадающие строки. Это основа любого конвейера обработки текста.
# Базовый поиск по шаблону
grep "error" server.log
# Поиск без учёта регистра
grep -i "warning" app.log
# Показать номера строк
grep -n "TODO" src/*.js
# Инвертированное совпадение (строки, НЕ содержащие шаблон)
grep -v "debug" output.log
# Расширенные регулярные выражения (-E включает +, ?, |, и группировку)
grep -E "error|warning|fatal" app.log
# Подсчитать только совпадения
grep -c "404" access.log
ripgrep (rg) — это более быстрая альтернатива, которая по умолчанию учитывает .gitignore:
# Рекурсивный поиск (поведение по умолчанию)
rg "useState" ./src
# Поиск по определённым типам файлов
rg -t js "async function"
# Показать контекст вокруг совпадений
rg -C 3 "Exception" logs/
Для больших кодовых баз ripgrep обычно работает в 2–5 раз быстрее, чем grep, и автоматически пропускает нерелевантные файлы.
Преобразование текста с помощью sed
sed выполняет потоковое редактирование — операции поиска и замены без открытия файла в редакторе.
# Заменить первое вхождение в каждой строке
sed 's/http/https/' urls.txt
# Заменить все вхождения (флаг global)
sed 's/old/new/g' config.txt
# Удалить строки, соответствующие шаблону
sed '/^#/d' config.ini
# Редактирование на месте (GNU sed)
sed -i 's/localhost/127.0.0.1/g' .env
# macOS/BSD требует пустого расширения для резервной копии
sed -i '' 's/localhost/127.0.0.1/g' .env
Примечание: Поведение флага
-iразличается между GNU и BSD sed. В macOS всегда указывайте пустую строку (-i '') или задавайте расширение для резервной копии (например,-i .bak).
Обработка столбцов с помощью awk
awk превосходно работает со структурированным текстом — логами, CSV и данными, разделёнными пробелами. POSIX awk портативно справляется с большинством распространённых задач.
# Вывести определённые столбцы
awk '{print $1, $4}' access.log
# Пользовательский разделитель полей (CSV)
awk -F',' '{print $2}' data.csv
# Фильтрация по условию
awk '$3 > 500 {print $1, $3}' response_times.log
# Суммировать столбец
awk '{sum += $2} END {print sum}' sales.csv
# Блоки BEGIN/END для заголовков
awk 'BEGIN {print "User\tCount"} {print $1, $2}' stats.txt
Основные вспомогательные команды
# Сортировка и удаление дубликатов (с подсчётом, по убыванию)
sort access.log | uniq -c | sort -rn
# Извлечь столбцы по разделителю
cut -d',' -f1,3 users.csv
# Преобразование символов (нижний регистр в верхний)
tr '[:lower:]' '[:upper:]' < input.txt
# Подсчитать строки в файле
wc -l package.json
# Найти файлы по шаблону имени
find ./src -name "*.test.js" -type f
Discover how at OpenReplay.com.
Обработка JSON с помощью jq
Для современной веб-разработки jq обрабатывает JSON-парсинг, с которым grep и awk не справляются чисто:
# Извлечь поле
jq '.data.users' response.json
# Фильтровать элементы массива
jq '.items[] | select(.status == "active")' data.json
# Форматировать ответ API
curl -s https://api.example.com/users | jq '.[].email'
Обратите внимание, что первый пример выше избегает бесполезного использования cat. jq может читать файлы напрямую, поэтому cat response.json | jq '...' не нужен.
Практические примеры конвейеров
Отфильтровать сегодняшние ошибки из логов:
grep "$(date +%Y-%m-%d)" app.log | grep -i error | awk '{print $4, $5}'
Извлечь уникальные IP-адреса:
awk '{print $1}' access.log | sort -u
Найти самые большие файлы в проекте по количеству строк:
find . -type f -name "*.js" -exec wc -l {} + | sort -rn | head -10
Очистить CSV-данные (извлечь столбцы, убрать кавычки, удалить дубликаты):
cut -d',' -f2,4 export.csv | sed 's/"//g' | sort -u
Краткий справочник
| Задача | Команда |
|---|---|
| Поиск по шаблону | grep "pattern" file |
| Быстрый рекурсивный поиск | rg "pattern" |
| Замена текста | sed 's/old/new/g' file |
| Извлечение столбцов | awk '{print $1}' file |
| Парсинг JSON | jq '.key' file.json |
| Сортировка и удаление дубликатов | sort -u file |
| Подсчёт строк | wc -l file |
Заключение
Освойте эти команды Linux для обработки текста, и вы сможете выполнять большинство задач по анализу логов, извлечению данных и преобразованию файлов прямо из терминала. Начните с grep для поиска, добавьте awk для работы со столбцами и обращайтесь к jq, когда дело касается JSON. Оператор конвейера (|) связывает всё вместе, позволяя вам составлять небольшие, целенаправленные команды в конвейеры, которые не уступают специализированным скриптам.
Часто задаваемые вопросы
Используйте cut, когда ваши данные имеют постоянный односимвольный разделитель и вам нужно просто получить определённые поля. Обращайтесь к awk, когда нужно фильтровать строки по условию, выполнять арифметические операции или обрабатывать нерегулярные пробелы. awk по умолчанию рассматривает последовательные пробелы как один разделитель, что делает его более снисходительным к лог-файлам и выводу команд.
Для большинства рабочих процессов разработчиков — да. ripgrep быстрее, учитывает .gitignore и использует разумные настройки по умолчанию, такие как рекурсивный поиск. Однако grep доступен практически на каждой Unix-системе по умолчанию, что делает его более безопасным выбором для портативных shell-скриптов. Если вы пишете скрипты, предназначенные для работы на минимальных серверах или в контейнерах, придерживайтесь grep.
Всегда сначала тестируйте команду sed без флага -i, чтобы просмотреть вывод в терминале. Когда будете готовы редактировать на месте, используйте расширение для резервной копии, например sed -i .bak в системах GNU. В macOS или BSD синтаксис — sed -i .bak. Это создаёт копию исходного файла перед применением изменений, давая вам возможность отката.
Да. jq создан для навигации по глубоко вложенным структурам. Используйте точечную нотацию для обхода объектов, квадратные скобки для массивов и выражения с конвейером для цепочки фильтров. Например, jq '.data.users[] | select(.active == true) | .email' проходит во вложенный массив, фильтрует по условию и извлекает поле — всё в одной команде.
Gain control over your UX
See how users are using your site as if you were sitting next to them, learn and iterate faster with OpenReplay. — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.