Просмотр файлов, поиск по содержимому, замена, выборка колонок и сравнение
| Команда | Вариант | Что делает |
|---|---|---|
| cat | cat file.txt | Выводит весь файл. |
| cat -n | cat -n file.txt | С нумерацией строк. |
| cat -A | cat -A file.txt | Показывает скрытые символы (табуляции как ^I, конец строки как $). |
| cat >> | cat >> notes.txt | Дописать ввод в конец файла (завершение Ctrl+D). |
| tac | tac file.txt | Строки в обратном порядке. |
| head | head -n 20 file.txt | Первые 20 строк. |
| head -c | head -c 200 file.bin | xxd | Первые 200 байт. |
| tail -n | tail -n 50 app.log | Последние 50 строк. |
| tail -n +N | tail -n +10 file.txt | Со строки 10 до конца. |
| tail -f | tail -f app.log | Следить за добавлением строк. |
| tail -F | tail -F app.log | Следить, даже если файл пересоздан при ротации логов. |
| less | less file.txt | Постраничный просмотр. Поиск по /, выход по q. |
| less +F | less +F app.log | Режим слежения внутри less (Ctrl+C — вернуться к листанию). |
| less -S | less -S wide.csv | Не переносить длинные строки. |
| more | more file.txt | Простой постраничный просмотр, меньше возможностей, чем less. |
| wc | wc -l file.txt | Количество строк. Также -w (слова), -c (байты), -m (символы). |
| nl | nl -ba file.txt | Пронумеровать все строки, включая пустые. |
| column -t | column -t -s, data.csv | Выровнять колонки по разделителю. |
| fold | fold -w 80 text.txt | Переносить строки на 80 символов. |
| rev | echo abc | rev | Перевернуть каждую строку. |
| Команда | Вариант | Что делает |
|---|---|---|
| grep | grep "error" app.log | Строки, содержащие шаблон. |
| grep -i | grep -i "error" app.log | Без учёта регистра. |
| grep -v | grep -v "^#" nginx.conf | Инвертировать: строки, которые НЕ совпадают (без комментариев). |
| grep -n | grep -n "timeout" app.conf | Показать номера строк. |
| grep -c | grep -c "GET" access.log | Только количество совпадений. |
| grep -o | grep -oE "[0-9]{1,3}(\.[0-9]{1,3}){3}" access.log | Выводить только совпавшую часть (например, IP-адреса). |
| grep -w | grep -w "port" conf | Слово целиком, а не часть другого слова. |
| grep -x | grep -x "enabled" flags.txt | Строка целиком совпадает с шаблоном. |
| grep -r | grep -rn "DB_HOST" /srv/app/ | Рекурсивный поиск по папке. |
| grep -l | grep -rl "TODO" src/ | Только имена файлов с совпадениями. |
| grep -L | grep -rL "license" src/ | Файлы, где совпадений нет. |
| grep -E | grep -E "error|fail|timeout" app.log | Расширенные регулярные выражения (можно |, +, ?, {n}). |
| grep -P | grep -P "\d{4}-\d{2}-\d{2}" app.log | Perl-регулярки (lookahead и \d). |
| grep -A -B -C | grep -C 3 "Exception" app.log | Контекст: -A после, -B до, -C с обеих сторон. |
| grep -m | grep -m 5 "ERROR" app.log | Остановиться после 5 совпадений. |
| grep -q | if grep -q "ok" status; then echo yes; fi | Без вывода, только код возврата (удобно в скриптах). |
| grep --include | grep -r --include="*.conf" "listen" /etc/ | Искать только в файлах по шаблону. |
| grep --exclude-dir | grep -r --exclude-dir=.git "TODO" . | Пропускать папки. |
| grep -e | grep -e "warn" -e "error" app.log | Несколько шаблонов сразу (логическое ИЛИ). |
| Команда | Вариант | Что делает |
|---|---|---|
| sed 's/a/b/' | sed 's/old/new/' file | Заменить первое совпадение в каждой строке. |
| sed 's/…/…/g' | sed 's/old/new/g' file | Заменить все совпадения. |
| sed -i | sed -i 's/debug=true/debug=false/' app.conf | Править файл на месте. |
| sed -i.bak | sed -i.bak 's/old/new/g' app.conf | Править на месте и сохранить копию app.conf.bak. |
| sed -n 'N,Mp' | sed -n '10,20p' file | Вывести строки с 10 по 20. |
| sed -n '/…/,/…/p' | sed -n '/START/,/END/p' file | Вывести блок между двумя шаблонами. |
| sed '/…/d' | sed '/^#/d' nginx.conf | Удалить строки по шаблону. |
| sed 'Nd' | sed '1d' data.csv | Удалить первую строку (заголовок). |
| sed '/…/a' | sed '/listen/a\ server_name example.com;' nginx.conf | Добавить строку после совпадения. |
| sed '/…/i' | sed '/^\[main\]/i # comment' conf.ini | Вставить строку перед совпадением. |
| sed -E | sed -E 's/([0-9]+)-([0-9]+)/\2-\1/' file | Расширенные регулярки и группы захвата. |
| sed 'Nq' | sed '5q' file | Вывести первые 5 строк и выйти. |
| sed -e | sed -e 's/a/b/' -e 's/c/d/' file | Несколько правок за один проход. |
| Команда | Вариант | Что делает |
|---|---|---|
| awk '{print $1}' | awk '{print $1}' access.log | Первая колонка (разделитель — пробелы). |
| awk -F | awk -F: '{print $1, $3}' /etc/passwd | Свой разделитель (здесь двоеточие). |
| awk -F, | awk -F, 'NR>1 {s+=$3} END {print s}' sales.csv | Сумма колонки в CSV, пропуская заголовок. |
| awk 'условие' | awk -F: '$3 >= 1000' /etc/passwd | Фильтр по условию (пользователи с UID от 1000). |
| awk '/regexp/' | awk '/ERROR/ {print $0}' app.log | Строки по регулярному выражению. |
| awk 'NR…' | awk 'NR>=10 && NR<=20' file | Диапазон строк. |
| awk '{print NF}' | awk '{print NF}' file | Число полей в каждой строке. |
| awk массив | awk '{c[$9]++} END {for (k in c) print c[k], k}' access.log | Подсчёт по ключу (здесь код ответа HTTP). |
| OFS | awk -F, 'BEGIN{OFS="\t"} {$1=$1; print}' data.csv | Поменять разделитель вывода. |
| awk -v | awk -v min=100 '$2 > min' data.txt | Передать переменную в awk. |
| Команда | Вариант | Что делает |
|---|---|---|
| cut -d… -f… | cut -d: -f1,3 /etc/passwd | Выбрать поля 1 и 3 с разделителем двоеточие. |
| cut -c | cut -c1-15 file | Символы с 1 по 15. |
| sort | sort names.txt | Сортировка по алфавиту. |
| sort -n | sort -n sizes.txt | Числовая сортировка. |
| sort -h | du -sh * | sort -h | Сортировка с суффиксами K, M, G. |
| sort -r | sort -rn counts.txt | Обратный порядок. |
| sort -k | sort -k2,2n data.txt | По второй колонке как по числу. |
| sort -u | sort -u list.txt | Сортировка с удалением дубликатов. |
| sort -t | sort -t, -k3 sales.csv | Сортировка CSV по третьей колонке. |
| uniq | sort list.txt | uniq | Удалить соседние дубликаты (нужна предварительная сортировка). |
| uniq -c | sort ips.txt | uniq -c | sort -rn | head | Топ повторяющихся строк. |
| uniq -d | sort list | uniq -d | Только строки, встречающиеся более одного раза. |
| uniq -u | sort list | uniq -u | Только уникальные строки. |
| tr | echo abc | tr 'a-z' 'A-Z' | Замена символов. |
| tr -d | tr -d '\r' < win.txt > unix.txt | Удалить символы (например, Windows-переводы строк). |
| tr -s | tr -s ' ' < file | Сжать повторяющиеся пробелы. |
| Команда | Вариант | Что делает |
|---|---|---|
| diff | diff a.conf b.conf | Различия построчно. |
| diff -u | diff -u old.conf new.conf | В формате unified (как в патчах и git). |
| diff -r | diff -r dir1/ dir2/ | Сравнить папки целиком. |
| diff -q | diff -rq dir1/ dir2/ | Только сообщить, что различается. |
| diff -w | diff -w a b | Игнорировать пробелы. |
| cmp | cmp backup.iso original.iso | Побайтовое сравнение, показывает первое отличие. |
| comm | comm -12 sorted1 sorted2 | Общие строки двух отсортированных файлов (-23 — только в первом). |
| paste | paste names.txt emails.txt | Склеить файлы построчно через табуляцию. |
| join | join -t: users.txt groups.txt | Объединить по общему ключу (файлы отсортированы по нему). |
| Команда | Вариант | Что делает |
|---|---|---|
| tee | make 2>&1 | tee build.log | Вывести на экран и записать в файл одновременно. |
| tee -a | cmd | tee -a journal.txt | Дописывать, а не перезаписывать. |
| xargs | cat ids.txt | xargs -n 1 echo | Превращает поток в аргументы команды. |
| xargs -I | cat list | xargs -I{} cp {} /backup/ | Подставлять каждое значение в нужное место. |
| xargs -0 | find . -print0 | xargs -0 wc -l | Безопасная работа с именами с пробелами. |
| xargs -P | cat urls.txt | xargs -P 8 -n 1 curl -sO | Параллельное выполнение в 8 потоков. |
| split -l | split -l 100000 big.csv part_ | Разбить файл по 100000 строк. |
| split -b | split -b 100M backup.tar part_ | Разбить по размеру. |
| cat part_* | cat part_* > backup.tar | Собрать части обратно. |
| printf | printf "%-10s %5d\n" name 42 | Форматированный вывод. |
| seq | seq 1 2 11 | Последовательность чисел с шагом. |
# Топ-10 IP по числу запросов
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10
# Количество ответов по кодам
awk '{print $9}' access.log | sort | uniq -c | sort -rn
# Ошибки 5xx за сегодня с временем
grep "$(date +%d/%b/%Y)" access.log | awk '$9 ~ /^5/ {print $4, $7, $9}'
# Заменить старый домен во всех конфигах с резервной копией
grep -rl "old.example.com" /etc/nginx | xargs sed -i.bak 's/old.example.com/new.example.com/g'
sed -i и xargs меняют файлы сразу. Перед массовой заменой запустите то же без -i (покажет результат в выводе) и сохраняйте резервную копию через -i.bak.