Шпаргалка по find, sed, ugrep
Эти команды — мощные инструменты для поиска, обработки и фильтрации данных в Linux. Здесь собраны примеры для ежедневного использования.
**Шпаргалка по find, sed, ugrep (+ grep)
1. find – Поиск файлов и выполнение действий
🔍 Базовый поиск
- Найти файлы по имени (регистронезависимо):
find /path -iname "*.txt" - Найти файлы, изменённые за последние 7 дней:
find /path -mtime -7 - Найти файлы размером >100 МБ:
find /path -size +100M - Найти пустые файлы и директории:
find /path -empty - Найти файлы с правами 755:
find /path -perm 755
⚡ Действия с найденными файлами
- Удалить все
.tmp-файлы:find /path -name "*.tmp" -delete - Изменить владельца файлов:
find /path -user olduser -exec chown newuser {} \; - Архивировать все
.log-файлы:find /var/log -name "*.log" -exec tar -czvf logs.tar.gz {} + - Найти и заменить права:
find /path -type f -exec chmod 644 {} \; - Найти файлы и вывести их размер:
find /path -type f -exec du -h {} \;
2. sed – Потоковый редактор (поиск и замена текста)
🔧 Базовые замены
- Заменить первое вхождение в строке:
echo "Hello World" | sed 's/World/Linux/' - Заменить все вхождения:
echo "a b a b" | sed 's/a/c/g' - Удалить строки, содержащие
error:sed '/error/d' file.txt - Удалить пустые строки:
sed '/^$/d' file.txt - Заменить только в строках, содержащих
debug:sed '/debug/s/old/new/' file.txt
📂 Работа с файлами
- Заменить в файле на месте (с бэкапом):
sed -i.bak 's/old/new/g' file.txt - Удалить строки с 5 по 10:
sed '5,10d' file.txt - Вывести только строки с 20 по 30:
sed -n '20,30p' file.txt - Добавить текст в начало файла:
sed -i '1i New Header' file.txt - Добавить текст в конец файла:
sed -i '$a Footer Text' file.txt
3. grep/ugrep – Поиск текста в файлах
🔎 Базовый поиск
- Найти слово в файле (регистронезависимо):
grep -i "pattern" file.txt - Найти точное совпадение (целое слово):
grep -w "word" file.txt - Вывести только совпадающую часть:
grep -o "pattern" file.txt - Найти строки, НЕ содержащие шаблон:
grep -v "exclude" file.txt - Подсчитать количество совпадений:
grep -c "pattern" file.txt
📂 Рекурсивный поиск
- Искать в всех файлах директории:
grep -r "pattern" /path/ - Искать только в
.php-файлах:grep -r --include="*.php" "pattern" /path/ - Искать в файлах без
.log:grep -r --exclude="*.log" "pattern" /path/ - Искать в скрытых файлах:
grep -r --hidden "pattern" /path/ - Искать в файлах изменённых за последние 2 дня:
find /path -mtime -2 -type f -exec grep -l "pattern" {} \;
🚀 ugrep – Улучшенный grep
- Поиск с подсветкой и нумерацией строк:
ugrep -n --color=auto "pattern" file.txt - Поиск с контекстом (строки до/после):
ugrep -C 3 "pattern" file.txt # 3 строки вокруг - Поиск с инвертированным контекстом:
ugrep -v -C 2 "pattern" file.txt - Поиск сжатых файлов (
.gz,.zip):ugrep -z "pattern" archive.gz - Поиск с регулярными выражениями:
ugrep -P "\d{3}-\d{2}-\d{4}" file.txt # Поиск SSN
4. Комбинации команд (find + grep + sed)
🔗 Поиск + обработка
- Найти все
.conf-файлы и заменитьhttpнаhttps:find /etc -name "*.conf" -exec sed -i 's/http/https/g' {} \; - Найти файлы, содержащие
password, и вывести их имена:find /path -type f -exec grep -l "password" {} \; - Удалить все строки с
# TODOиз.py-файлов:find . -name "*.py" -exec sed -i '/# TODO/d' {} \;
📊 Анализ логов
- Найти ошибки в логах за последний час:
grep "ERROR" /var/log/syslog | grep "$(date -d '1 hour ago' '+%b %d %H')" - Посчитать уникальные IP в Nginx-логе:
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
📂 Массовая обработка файлов
- Переименовать все
.jpg→.png:find . -name "*.jpg" | sed 's/\.jpg$//' | xargs -I {} mv {}.jpg {}.png - Удалить BOM из UTF-8 файлов:
find . -type f -exec sed -i '1s/^\xEF\xBB\xBF//' {} \; - Удалить все пробелы в конце строк:
find . -type f -exec sed -i 's/[[:space:]]*$//' {} \;
🔒 Безопасность
- Найти файлы с SUID/SGID:
find / -type f \( -perm -4000 -o -perm -2000 \) -exec ls -la {} \; - Найти открытые порты и процессы:
netstat -tulnp | grep -E '0.0.0.0|:::'
📜 Разное
- Извлечь все email из файла:
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b" file.txt - Заменить
CRLF→LF(Windows → Unix):sed -i 's/\r$//' file.txt - Удалить HTML-теги из файла:
sed 's/<[^>]*>//g' file.html - Найти дубликаты файлов по содержимому:
find . -type f -exec md5sum {} + | sort | uniq -w32 -dD - Случайная строка из файла:
shuf -n 1 file.txt
Итоговая таблица
| Задача | Команда |
|---|---|
| Поиск файлов | find /path -name "*.txt" |
| Замена текста | sed 's/old/new/g' file.txt |
| Рекурсивный поиск текста | grep -r "pattern" /path/ |
| Удаление строк | sed '/pattern/d' file.txt |
| Поиск в логах | grep "ERROR" /var/log/syslog |
🚀 Совет:
ugrepбыстрееgrepи поддерживает расширенные regex (-P).find + execмощнееxargs, ноxargsлучше для большого числа файлов.