Есть несколько способов сделать это:
использовать стену
для широковещательной рассылки сообщения вошедшим в систему пользователям. У этого есть недостаток, что он отправляется, даже если они редактируют файл. Вы можете запланировать это с помощью cron
, например, эту запись в root
crontab :
* 0 * * * wall / etc / motd
, если они используют bash
(и если вы контролируете их конфигурацию), приглашение bash может выполнять функции оболочки через PROMPT_COMMAND
.
Вы не указываете связь между заголовками и строками. Но если отношение представляет собой постоянное количество строк, вы можете получить номера строк с помощью grep, а затем использовать sed для извлечения строк.
Например, чтобы получить все строки после подзаголовка:
#!/bin/bash
file_in=/tmp/test.txt
file_out=/tmp/file1.txt
LINES=`grep -n Subheader $file_in | cut -f1 -d:`
for line in $LINES; do
echo $line
line1=$(($line+1))
sed -n ${line1}p $file_in >> $file_out
done
Редактировать :вы можете запустить скрипт выше в цикле:
#!/bin/bash
n_max=100
file_in=/tmp/test.txt
file_out=/tmp/file
LINES=`grep -n Subheader $file_in | cut -f1 -d:`
for n in `seq 1 $n_max`; do
echo "line $n"
for line in $LINES; do
line_n=$(($line+$n))
sed -n ${line_n}p $file_in >> $file_out$n.txt
done
done
exit 0
Мы можем сделать это следующим образом:
perl -Mautodie -lne '
if ( /Subheader/... /Header/ ) {
open FILE, q[>>], q[file]. ++$a if /Subheader/;
close FILE if /Header/;
print FILE if !/Subheader/ && !/Header/;
}
' large_file.log
Это создаст мини-файлы -файл1, файл2 и т. д.
Perl открывает новый дескриптор файла, когда встречает строку подзаголовка. И он закрывает этот дескриптор файла, когда встречает строку заголовка. для всех остальных строк он выводит дескриптор файла.