Шпаргалка по 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
лучше для большого числа файлов.