Links

Работа с файлами в Linux системах

Использование таких инструментов, как grep, egrep, head, tail, touch, echo, cat, wc, seq в дистрибутивах Linux и подобных системах.
Мы рассмотрим самые основные утилиты для обработки информации в Linux / MacOS, которые подойдут для любого размера файлов и не будут подводить вас в производительности.
Начнем с простого и помаленьку будем двигаться к более сложными комбинациям и инструментам.

Создать пустой файл

Для этого к нам на помощь приходит утилита touch. Следующий пример создать один файл test.txt.
touch test.txt
Одной командой можно создать несколько файлов.
touch test1.txt test2.txt test3.txt
Но есть и более правильный метод для того, чтобы создать пронумерованные файлы.
touch test{1,2,3,4,5}.txt
Инструмент способен также изменить метку создания / последнего открытия файла. Например, следующей командой мы изменим время создания.
Используется формат времени YYMMDDhhmm.SS.
touch -t 199401010120 filename.txt

Записать информацию в файл

Внести любое содержимое в файл можно стандартным инструментов echo. Следующая команда перезапишет полностью файл.
echo "test content" > filename.txt
Можно и не перезаписывать, а просто добавить содержимое в конец файла.
echo "test content end" >> filename.txt
То есть в файл можно записать результат любой команды, все опирается на конечную конструкцию >> filename.txt, а конкретно на операторы >> и >.

Вывести числовую последовательность

Теперь давайте познакомимся с инструментом seq, которым можно генерировать практически любые последовательности чисел.
seq 1 5
Результат
1
2
3
4
5
Или вывести последовательность Start + Increment, Start + Increment + Increment и так далее до Stop числа.
seq 1 3 10
Результат
1
4
7
10
В выводе команды можно заменить разделитель, который по умолчанию \n, что значит отступ или новая строка.
seq -s "|" 1 10
Результат
1|2|3|4|5|6|7|8|9|10|

Вывести содержимое файла

Если файл слишком большой, то выводить будет аналогично долго.
cat filename.txt

Количество строк в файле

Данной командой через конвейер вы получите количество строк в указанном файле.
cat filename.txt | wc -l
Вариант без конвейера.
wc -l filename.txt

Последние N строк файла

Следующая команда выведет последние 15 строк из filename.txt.
tail -n 15 filename.txt
Также вы можете видеть последние 15 строк в режиме реального времени. Обычно это полезно для мониторинга логов.
tail -f -n 15 filename.txt
Аналогично со строками вы можете вывести определенное количество байт с конца файла.
tail -c 15 filename.txt

Первые N строк файла

Параметры точно такие же, но отсутствует параметр для вывода в режиме реального времени так как по сути своей – бесполезный.
1
head -n 15 filename.txt # вывести первые 15 строк
2
head -c 15 filename.txt # вывести первые 15 байт
Обе функции head и tail можно использовать в конвейере, например
cat filename.txt | head -n 15
cat filename.txt | tail -n 15

Вытащить определенную строку из файла

Для этого и многого другого отлично подходит инструмент под названием grep.
Он очень удобный и с очень гибкими возможностями для работы и форматирования вывода. С помощью него вы можете «вырвать» из файла строки, содержащие определенные символы, окрасить в нужный цвет и ряд других функций.
Стандартно, получаем все строки, содержащие CREATE TABLE, делается через конвейер.
cat filename.txt | grep "PATTERN"
Получаем то же самое, но захватываем еще 5 строк сверху.
cat filename.txt | grep "PATTERN" -B 5
Аналогично, но на этот раз добавляем 5 строк снизу.
cat filename.txt | grep "PATTERN" -A 5
А теперь сразу и снизу, и сверху по 2 строки.
cat filename.txt | grep "PATTERN" -C 2
Принимается также следующая конструкция.
grep -E "PATTERN" filename.txt
Или командой egrep.
egrep "PATTERN" filename.txt
egrep и grep отличаются лишь отсутствием опции -E.
Также все опции, что были в варианте с конвейером используются аналогично и в данных командах, и ставятся перед целевым выражением.
Можно подсчитать количество указанных выражений в файле.
egrep -c "PATTERN" filename.txt
Вырезать из файла целевое выражение (в выводе команды будет содержимое файла, не содержащее наше PATTERN).
egrep -v "PATTERN" filename.txt
Найти определенные слова, критериями которых являются любые другие спец. символы по бокам. Проще говоря – поиск конкретных слов и следующее выражение не выведет вам строки, содержащие THEPATTERN, но выведет, если PATTERN – отдельное слово.
egrep -w "PATTERN" filename.txt
Следующая команда найдет все строки, начинающиеся с указанного выражения или символа.
egrep "^PATTERN" filename.txt
Похожей командой можно найти и строки, заканчивающиеся указанным текстом или символом.
egrep "PATTERN$" filename.txt