9. Текстовые инструменты
Работа с текстом в терминале
Заголовок раздела «Работа с текстом в терминале»Большинство данных в Linux — текстовые файлы: конфиги, логи, исходный код. Умение работать с текстом в терминале — обязательный навык.
vim — мощный редактор
Заголовок раздела «vim — мощный редактор»vim страшит новичков, но это один из самых мощных редакторов. Он есть на любом сервере.
Запуск и режимы
Заголовок раздела «Запуск и режимы»vim file.txt # открыть файлvim +42 file.txt # открыть на строке 42vim +/pattern file # открыть с поискомvim имеет несколько режимов:
- Normal — навигация и команды (стартовый режим)
- Insert — ввод текста
- Visual — выделение
- Command — командная строка (
:)
Базовые команды
Заголовок раздела «Базовые команды»i → войти в Insert режимEsc → вернуться в Normal режим:w → сохранить:q → выйти:wq или ZZ → сохранить и выйти:q! → выйти без сохранения:wq! → принудительно сохранить и выйти
# Навигация в Normal режимеh,j,k,l → влево, вниз, вверх, вправоgg → начало файлаG → конец файла:42 → перейти на строку 420 → начало строки$ → конец строкиw → следующее словоb → предыдущее слово
# Редактированиеdd → удалить строкуyy → скопировать строкуp → вставитьu → отменить (undo)Ctrl+r → повторить (redo). → повторить последнее действиеx → удалить символ
# Поиск/pattern → найти вперёд (n — следующее)?pattern → найти назад:%s/old/new/g → заменить всё в файлеПрактичные vim-паттерны
Заголовок раздела «Практичные vim-паттерны»# Открыть файл и заменить строкиvim -c '%s/localhost/production.server.com/g' -c 'wq' config.yml
# Вставить результат команды в vim:r !date # вставить текущую дату:r !ls # вставить список файловnano — простой редактор
Заголовок раздела «nano — простой редактор»nano — дружелюбная альтернатива для тех, кто не хочет учить vim.
nano file.txt # открыть файлnano +42 file.txt # открыть на строке 42Подсказки по горячим клавишам видны внизу экрана:
^G — справка (Ctrl+G)^X — выйти (Ctrl+X)^O — сохранить (Ctrl+O)^W — поиск (Ctrl+W)^K — вырезать строку (Ctrl+K)^U — вставить (Ctrl+U)^C — позиция курсора (Ctrl+C)grep — продвинутый поиск
Заголовок раздела «grep — продвинутый поиск»# Базовый поискgrep "error" log.txt # найти строки с "error"grep -i "error" log.txt # без учёта регистра
# Рекурсивный поиск в проектеgrep -r "TODO" src/ # найти TODO в директорииgrep -r --include="*.js" "fetch" . # только в .js файлахgrep -r --exclude="*.min.js" "function" .
# Полезные флагиgrep -n "pattern" file.txt # с номерами строкgrep -l "pattern" *.txt # только имена файловgrep -L "pattern" *.txt # файлы БЕЗ паттернаgrep -c "pattern" file.txt # количество совпаденийgrep -v "pattern" file.txt # инвертированный поиск
# Контекст вокруг совпаденийgrep -A 5 "ERROR" log.txt # 5 строк послеgrep -B 3 "ERROR" log.txt # 3 строки доgrep -C 2 "ERROR" log.txt # 2 строки с обеих сторон
# Регулярные выраженияgrep -E "error|warning|fatal" log.txt # несколько паттерновgrep "^ERROR" log.txt # начало строкиgrep "\.js$" filelist.txt # конец строкиgrep "[0-9]\{3\}" file.txt # три цифры подрядgrep -P "\d{3}-\d{2}-\d{4}" file.txt # Perl regexwc — подсчёт
Заголовок раздела «wc — подсчёт»wc file.txt # строки, слова, байтыwc -l file.txt # только строкиwc -w file.txt # только словаwc -c file.txt # только байтыwc -m file.txt # символы (с учётом UTF-8)
# Полезные комбинацииls | wc -l # сколько файлов в директорииgrep -r "TODO" src/ | wc -l # сколько TODO в кодеcat log.txt | wc -l # строк в логеdiff — сравнение файлов
Заголовок раздела «diff — сравнение файлов»diff file1.txt file2.txt # сравнить два файлаdiff -u file1.txt file2.txt # unified формат (для патчей)diff -r dir1/ dir2/ # сравнить директорииdiff -i file1.txt file2.txt # игнорировать регистрdiff --color file1.txt file2.txt # цветной вывод
# Понимание вывода diff# < означает строки из первого файла# > означает строки из второго файла# --- разделитель
# vimdiff — удобное визуальное сравнениеvimdiff file1.txt file2.txtpatch — применение патчей
Заголовок раздела «patch — применение патчей»# Создать патчdiff -u original.txt modified.txt > changes.patch
# Применить патчpatch original.txt < changes.patchpatch -p1 < feature.patch # применить к проекту
# Откатить патчpatch -R original.txt < changes.patchДополнительные инструменты
Заголовок раздела «Дополнительные инструменты»# cut — вырезать колонкиcut -d: -f1 /etc/passwd # первая колонка (логины)cut -d, -f2,4 data.csv # 2-я и 4-я колонка CSVcut -c1-10 file.txt # символы 1-10
# tr — замена символовecho "Hello World" | tr 'a-z' 'A-Z' # в верхний регистрecho "Hello" | tr -d 'l' # удалить все 'l'cat file.txt | tr -s ' ' # схлопнуть пробелы
# tee — писать в файл и stdoutcommand | tee output.txt # и на экран, и в файлcommand | tee -a log.txt # и на экран, и добавить в файл
# column — выровнять таблицуcat data.csv | column -t -s, # выровнять CSV
# xxd — просмотр в hexxxd binary.file | head -20xxd -l 64 file # первые 64 байтаПрактика
Заголовок раздела «Практика»# 1. Откроем vim и выполним базовые операции# (если страшно, используй nano)echo "Line 1\nLine 2\nLine 3" > /tmp/test.txtvim /tmp/test.txt# Нажми G (перейти в конец)# Нажми i (insert)# Напечатай новую строку# Нажми Esc, затем :wq
# 2. Поиск в файлах проектаfind . -name "*.md" -exec grep -l "TODO" {} \;
# 3. Статистика по кодуfind . -name "*.js" -exec cat {} \; | wc -l
# 4. Сравни два конфигаcp /etc/hosts /tmp/hosts.bakdiff /etc/hosts /tmp/hosts.bak
# 5. Частотный анализ слов в файлеcat file.txt | tr ' ' '\n' | sort | uniq -c | sort -rn | head -10Освоив текстовые инструменты, ты можешь обрабатывать любые данные прямо в терминале!