Table of Contents
🐱 cat: кратко и по делу#
cat (concatenate) — выводит содержимое файлов, склеивает их и перенаправляет поток в другие команды/файлы.
Незаменим в пайпах, для быстрых просмотров, простых правок через here‑doc и сборки файлов.
📝 Топ‑20 полезных флагов cat (GNU coreutils)#
-n, --number— нумеровать все строки.-b, --number-nonblank— нумеровать только непустые строки.-s, --squeeze-blank— сжимать подряд идущие пустые строки в одну.-A, --show-all— показать всё: непечатаемые символы, табы и конец строки (-vET).-E, --show-ends— показывать символ конца строки$.-T, --show-tabs— отображать табы как^I.-v, --show-nonprinting— показать непечатаемые символы (кроме таб/новой строки).-e— то же, что-vE.-t— то же, что-vT.--help— краткая справка.--version— версия утилиты.-u— (исторически «безбуферный» вывод; в GNU игнорируется).- Поддержка
-как stdin:cat - file— читать и из stdin, и из файла. - Работает с бинарными файлами (без интерпретации).
- Поддерживает несколько входных файлов:
cat a b c. - Отлично дружит с пайпами:
... | cat | ...(но избегайте «бесполезного cat»). - Хорош в here‑doc:
cat <<'EOF' ... EOF. - Хорош в process substitution:
cat <(cmd1) <(cmd2)(bash/zsh). - С
teeдля одновременной записи и вывода.
🚀 Айсберг команд cat — от базового к гуру#
🟢 Уровень 1 — База (разогрев)#
cat file.txt
- Вывести файл на экран
cat file1 file2 > both.txt
- Склеить файлы в новый
cat >> notes.txt
- Дописать в конец
notes.txt(Ctrl+D — завершить)
cat -n file.txt
- Нумерация всех строк
cat -b -s file.txt
- Нумеровать только непустые + сжать пустые строки
🟡 Уровень 2 — Видимость скрытых символов#
cat -A file.txt
- Показать непечатаемые, табы и
$в конце строки
cat -E file.txt
- Показать только концы строк (
$)
cat -T file.txt
- Показать табуляции как
^I
cat -v binary.dat | head
- Безопасно «подсветить» непечатаемые
cat -n -A script.sh | less -R
- Нумерация + явные символы, удобно для ревью
🟠 Уровень 3 — Редактирование на лету (here‑doc / heredoc)#
cat > hello.txt <<'EOF' Hello World EOF
- Быстро создать файл из встроенного текста (без подстановок, благодаря кавычкам)
`cat » todo.txt «EOF
- fix bug #42
- write tests EOF`
- Дописать блок в конец
cat <<'EOF' | sed 's/foo/bar/g' > out.txt foo is here foo again EOF
- Встроенный текст через пайп‑обработку
🔵 Уровень 4 — Пайпы и конвейеры#
cat access.log | grep "500" | awk '{print $7}' | sort | uniq -c | sort -nr | head
- Быстрый разбор топ‑ошибок 500 в логах
cat file | tee copy.txt | wc -l
- Одновременно вывести, записать копию и посчитать строки
zcat logs.gz | cat -n | less
- Нумерация распакованных строк на лету
cat <(cmd1) <(cmd2) | sed '/^$/d'
- Склеить вывод двух команд и отфильтровать пустые строки
🟣 Уровень 5 — Бинарные файлы, кодировки, сырой ввод#
cat img.jpg part.bin > combo.bin
- Конкатенация бинарных потоков
cat -v file | hexdump -C | less
- Просмотр бинарника в человекочитаемом виде
iconv -f cp1251 -t utf-8 file.txt | cat -n
- Конвертация кодировок с нумерацией
cat /dev/urandom | head -c 16 | hexdump -C
- Сырые байты для тестов
🔴 Уровень 6 — Потоки, stdin и смешанные источники#
cat - file.txt - other.txt
- Читать из stdin, затем файл, снова stdin, затем другой файл
somecmd | cat - file.txt > merged.txt
- Приклеить вывод команды перед содержимым файла
cat -n -- file-*
- Безопасная обработка имён, начинающихся с
-
cat <(sort a) <(sort b)
- Объединить отсортированный вывод двух файлов
🟤 Уровень 7 — Гуру‑режим и продвинутые трюки#
awk '1; END{print "---"}' file | cat -n
- Смешать генерацию с нумерацией вывода
grep -n "pattern" file | cat -n
- Двойная нумерация для быстрой навигации
cat -A file | sed -n '1,50p'
- Диагностика «грязных» символов/концов строк в диапазоне
paste <(cat f1) <(cat f2)
- Склеить постолбцово два файла
{ cat header.txt; echo; cat body.txt; } > full.txt
- Сборка файла из частей с пустой строкой между ними
🧩 Бонус — практические рецепты#
Собрать много файлов в один:
cat *.part > full.img
Показать файл с нумерацией только непустых строк:
cat -b file.txt
Быстро создать файл из нескольких строк:
cat > README <<'EOF'
Project X
=========
Quick start...
EOF
Увидеть табы и концы строк:
cat -T -E file.txt
Прокинуть текст через цепочку и сохранить копию:
cat <<'EOF' | sed 's/[ ]\\+$//' | tee cleaned.txt
line with trailing spaces
EOF