Вы находитесь на странице: 1из 1

Лабораторная работа №2.

Обработка текстовых потоков в ОС Linux

1. Создать файл errors.log, в который поместить все строки из всех доступных для чтения
файлов директории /var/log/, начинающиеся с последовательности символов ACPI, без указания
имени файла, в котором встретилась строка. Вывести на экран те строчки из получившегося
файла, которые содержат полные имена каких-либо файлов

#!/bin/bash
grep -E -r -h "^ACPI.*" /var/log/ > errors.log
grep -E -r -h "^.*[:alnum:]\.[:alpha:]" /home/user/shvalova/lab2/errors.log

2. Создать full.log, в который вывести строки файла /var/log/Xorg.0.log, содержащие


предупреждения и информационные сообщения,заменив маркеры предупреждений и
информационных сообщений на слова Warning: и Information:, чтобы в получившемся файле
сначала шли все ошибки, а потом все предупреждения. Вывести этот файл на экран.

#!/bin/bash
inf="\\(II\\)"
war="\\(WW\\)"
grep -E -h -s $war /var/log/Xorg.0.log | sed -E "s/$war/Warning: /" > full.log
grep -E -h -s $inf /var/log/Xorg.0.log | sed -E "s/$inf/Information: /" >> full.log

3. Создать файл emails.lst, в который вывести через запятую все адреса электронной почты,
встречающиеся во всех файлах директории/etc.

#!/bin/bash
mail="[a-zA-Z0-9_.]+@[a-zA-Z0-9_]+(\\.[a-zA-Z]+)+"
grep -E -h -s -o -w $mail /etc/* | awk '{printf("%s, ",$1)}' | sed -E "s/$mail,\s$//g" >
emails.lst

4. Найти в директории /bin все файлы, которые являются сценариями, и вывести на экран
полное имя файла с интерпретатором, наиболее часто используемым в этих сценариях (только
полное имя файла).

#!/bin/bash
p="*.bash"
grep -E -o -h -s "^#!\s*/\S+$" $p | sed -E "s/^#!\s*(\/\S+)$/\1/" | awk '{w=tolower($1);
a[w]++} END {for (k in a) {print k, a[k]}}' | sort -n -r -k 2 | sed 1q | tr -d "[0-9]$"

5. Вывести список пользователей системы с указанием их UID, отсортировав по UID. Сведения


о пользователей хранятся в файле /etc/passwd. В каждой строке этого файла первое поле - имя
пользователя, третье поле - UID. Разделитель - двоеточие.

#!/bin/bash
awk '{ FS=":"; print $3, $1;}' /etc/passwd | sort -n -k 1

6. Подсчитать общее количество строк в файлах, находящихся в директории /var/log/ и


имеющих расширение log.

#!/bin/bash
cat /var/log/*.log | wc –l

7. Вывести три наиболее часто встречающихся слова из man по команде bash длиной не менее
четырех символов.

#!/bin/bash
man bash | grep -o -i "[a-zA-Z]\{4,\}" | tr "[:upper:]" "[:lower:]" | sort | uniq -c |
sort -r -n | head -3