Работа с файлами в 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 строк файла

Параметры точно такие же, но отсутствует параметр для вывода в режиме реального времени так как по сути своей – бесполезный.

head -n 15 filename.txt  # вывести первые 15 строк
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

Last updated