Шпаргалка по find, sed, ugrep

Эти команды — мощные инструменты для поиска, обработки и фильтрации данных в Linux. Здесь собраны примеры для ежедневного использования.

**Шпаргалка по find, sed, ugrep (+ grep)


1. find – Поиск файлов и выполнение действий

🔍 Базовый поиск

  1. Найти файлы по имени (регистронезависимо):
    find /path -iname "*.txt"
    
  2. Найти файлы, изменённые за последние 7 дней:
    find /path -mtime -7
    
  3. Найти файлы размером >100 МБ:
    find /path -size +100M
    
  4. Найти пустые файлы и директории:
    find /path -empty
    
  5. Найти файлы с правами 755:
    find /path -perm 755
    

⚡ Действия с найденными файлами

  1. Удалить все .tmp-файлы:
    find /path -name "*.tmp" -delete
    
  2. Изменить владельца файлов:
    find /path -user olduser -exec chown newuser {} \;
    
  3. Архивировать все .log-файлы:
    find /var/log -name "*.log" -exec tar -czvf logs.tar.gz {} +
    
  4. Найти и заменить права:
    find /path -type f -exec chmod 644 {} \;
    
  5. Найти файлы и вывести их размер:
    find /path -type f -exec du -h {} \;
    

2. sed – Потоковый редактор (поиск и замена текста)

🔧 Базовые замены

  1. Заменить первое вхождение в строке:
    echo "Hello World" | sed 's/World/Linux/'
    
  2. Заменить все вхождения:
    echo "a b a b" | sed 's/a/c/g'
    
  3. Удалить строки, содержащие error:
    sed '/error/d' file.txt
    
  4. Удалить пустые строки:
    sed '/^$/d' file.txt
    
  5. Заменить только в строках, содержащих debug:
    sed '/debug/s/old/new/' file.txt
    

📂 Работа с файлами

  1. Заменить в файле на месте (с бэкапом):
    sed -i.bak 's/old/new/g' file.txt
    
  2. Удалить строки с 5 по 10:
    sed '5,10d' file.txt
    
  3. Вывести только строки с 20 по 30:
    sed -n '20,30p' file.txt
    
  4. Добавить текст в начало файла:
    sed -i '1i New Header' file.txt
    
  5. Добавить текст в конец файла:
    sed -i '$a Footer Text' file.txt
    

3. grep/ugrep – Поиск текста в файлах

🔎 Базовый поиск

  1. Найти слово в файле (регистронезависимо):
    grep -i "pattern" file.txt
    
  2. Найти точное совпадение (целое слово):
    grep -w "word" file.txt
    
  3. Вывести только совпадающую часть:
    grep -o "pattern" file.txt
    
  4. Найти строки, НЕ содержащие шаблон:
    grep -v "exclude" file.txt
    
  5. Подсчитать количество совпадений:
    grep -c "pattern" file.txt
    

📂 Рекурсивный поиск

  1. Искать в всех файлах директории:
    grep -r "pattern" /path/
    
  2. Искать только в .php-файлах:
    grep -r --include="*.php" "pattern" /path/
    
  3. Искать в файлах без .log:
    grep -r --exclude="*.log" "pattern" /path/
    
  4. Искать в скрытых файлах:
    grep -r --hidden "pattern" /path/
    
  5. Искать в файлах изменённых за последние 2 дня:
    find /path -mtime -2 -type f -exec grep -l "pattern" {} \;
    

🚀 ugrep – Улучшенный grep

  1. Поиск с подсветкой и нумерацией строк:
    ugrep -n --color=auto "pattern" file.txt
    
  2. Поиск с контекстом (строки до/после):
    ugrep -C 3 "pattern" file.txt  # 3 строки вокруг
    
  3. Поиск с инвертированным контекстом:
    ugrep -v -C 2 "pattern" file.txt
    
  4. Поиск сжатых файлов (.gz, .zip):
    ugrep -z "pattern" archive.gz
    
  5. Поиск с регулярными выражениями:
    ugrep -P "\d{3}-\d{2}-\d{4}" file.txt  # Поиск SSN
    

4. Комбинации команд (find + grep + sed)

🔗 Поиск + обработка

  1. Найти все .conf-файлы и заменить http на https:
    find /etc -name "*.conf" -exec sed -i 's/http/https/g' {} \;
    
  2. Найти файлы, содержащие password, и вывести их имена:
    find /path -type f -exec grep -l "password" {} \;
    
  3. Удалить все строки с # TODO из .py-файлов:
    find . -name "*.py" -exec sed -i '/# TODO/d' {} \;
    

📊 Анализ логов

  1. Найти ошибки в логах за последний час:
    grep "ERROR" /var/log/syslog | grep "$(date -d '1 hour ago' '+%b %d %H')"
    
  2. Посчитать уникальные IP в Nginx-логе:
    awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
    

📂 Массовая обработка файлов

  1. Переименовать все .jpg.png:
    find . -name "*.jpg" | sed 's/\.jpg$//' | xargs -I {} mv {}.jpg {}.png
    
  2. Удалить BOM из UTF-8 файлов:
    find . -type f -exec sed -i '1s/^\xEF\xBB\xBF//' {} \;
    
  3. Удалить все пробелы в конце строк:
    find . -type f -exec sed -i 's/[[:space:]]*$//' {} \;
    

🔒 Безопасность

  1. Найти файлы с SUID/SGID:
    find / -type f \( -perm -4000 -o -perm -2000 \) -exec ls -la {} \;
    
  2. Найти открытые порты и процессы:
    netstat -tulnp | grep -E '0.0.0.0|:::'
    

📜 Разное

  1. Извлечь все email из файла:
    grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b" file.txt
    
  2. Заменить CRLFLF (Windows → Unix):
    sed -i 's/\r$//' file.txt
    
  3. Удалить HTML-теги из файла:
    sed 's/<[^>]*>//g' file.html
    
  4. Найти дубликаты файлов по содержимому:
    find . -type f -exec md5sum {} + | sort | uniq -w32 -dD
    
  5. Случайная строка из файла:
    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 лучше для большого числа файлов.