🐱 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