Когда дело доходит до обработки текста в Linux, у нас есть классическая "великая четвёрка": grep, awk, sed, perl. Все они умеют искать и преобразовывать строки, но что выбрать, если важна производительность?
⭐️ Тест: кто быстрее?
Возьмём файл на 1 млн строк (logs.txt) и задачу - найти строки, содержащие "ERROR" и вывести их.
# 1. grep — специализируется на поиске
time grep 'ERROR' logs.txt
# 2. awk — универсален, но чуть медленнее grep
time awk '/ERROR/' logs.txt
# 3. sed — может искать, но не для этого заточен
time sed -n '/ERROR/p' logs.txt
# 4. perl - мощь и регулярки, но запускается дольше
time perl -ne 'print if /ERROR/' logs.txt
🕛 Результаты (примерные):
Команда Время (сек) Комментарий
grep 0.18 - Самый быстрый в чистом поиске
awk 0.25 - Универсал, чуть медленнее
sed 0.30 - Не лучший для просто поиска
perl 0.35 - 0.50 Мощно, но медленно стартует
🌟 Что важно помнить:
grep - лучший выбор для быстрого поиска. Используй grep -F (fixed strings) для ещё большей скорости.
awk - когда нужна логика: фильтрация, подсчёты, агрегирование.
sed - идеально для простых замен (особенно sed -i), но не лучший инструмент для поиска.
perl - тянет даже сложнейшие регулярки и постобработку, но стоит дороже по времени запуска.
🌟 Хитрости: Для поиска без регулярных выражений:
1.
grep -F "ERROR" → быстрее, чем обычный grep.2. Используй
LC_ALL=C или LANG=C для ускорения поиска (отключает локализацию):
LC_ALL=C grep 'ERROR' logs.txt
3. Объединяй:
grep 'ERROR' logs.txt | awk '{print $1}' # вытащить дату, например
BashTex 📱 #linux #utils