Ваши первые три команды являются преступником:
:a
N
$!ba
Это читает весь файл в память сразу. Следующий сценарий должен только сохранить один сегмент в памяти за один раз:
% cat test.sed
#!/usr/bin/sed -nf
# Append this line to the hold space.
# To avoid an extra newline at the start, replace instead of append.
1h
1!H
# If we find a paren at the end...
/)$/{
# Bring the hold space into the pattern space
g
# Remove the newlines
s/\n//g
# Print what we have
p
# Delete the hold space
s/.*//
h
}
% cat test.in
a
b
c()
d()
e
fghi
j()
% ./test.sed test.in
abc()
d()
efghij()
Это awk решение распечатает каждую строку, как это прибывает, таким образом, это будет только иметь одну строку в памяти за один раз:
% awk '/)$/{print;nl=1;next}{printf "%s",$0;nl=0}END{if(!nl)print ""}' test.in
abc()
d()
efghij()
Не со значением по умолчанию ext2/3/4
файловая система Linux, я думаю, что Ваше единственное решение состоит в том, чтобы зарегистрировать использование Вашего файла в файл журнала (но люди могли найти, что файл и изменяет его.
Таким образом, мой совет состоял бы в том, чтобы использовать небольшой веб-сервис (PHP
, Python
или даже perl
тот инкремент значение в дб так люди не мог изменить значение легко).
Редактирование 1:
Хорошо кажется, что некоторое программное обеспечение могло выполнить такую задачу, см. сообщение
К сценарию для подсчета количества раз файлом получили доступ
Отредактируйте 2 (как состояние комментаторами):
Можно запустить с хорошего учебного руководства на auditd
deamon.
И также ищите Google, или Утиная утка идут для auditd
который является названием deamon, Вам будет нужно.