Можно использовать find
, stat
, sort
, и tail
сделать это.
find . -exec stat --format="%X" + | sort -n | tail -n 10
Однако Вы могли бы рассмотреть использование watch
и du
. watch
будет периодически выполнять команду (каждые 2 секунды по умолчанию). И du
выставочное использование диска. Эта команда покажет Вам использование диска каждого файла и папки в текущем каталоге, и вывод будет непрерывно обновляться.
watch "du -s *"
Можно запустить в корне и видеть, какая папка увеличивает самое быстрое, затем прогрессируйте вниз иерархия папок, пока Вы не находите преступника (преступников).
Если Вы находитесь в папке, которая имеет слишком много файлов для наблюдения на экране сразу, можно ограничить его путем разделения файлов как du -s [a-h]*
. Кроме того, это не покажет скрытые файлы; для этого Вам нужно .*
или .[a-h]*
, и т.д.
см. https://stackoverflow.com/questions/5858200/sed-replace-every-nth-occurrence
Решение использует awk, а не sed, но "используют правильный инструмент для задания". Это может или не может быть возможно сделать в sed, но, даже если это будет, то это будет намного легче в инструменте как awk или жемчуг.
sed 's/pattern/replacement/2'
Заменит второе возникновение на каждой строке, которая имеет шаблон.
если у Вас есть GNU sed
:
sed '1~2N ; s/pattern/replacement/2'
Запуск со строки один 1
, строка после того, как это будет добавлено к пространству шаблона N
затем s
команда заменит второе возникновение шаблона. затем sed
спустит две строки ~2
и повторитесь.
code
(sed '1~2s/pattern/replacement /')
– jaap
22.06.2015, 17:30
Один шаблон символа в одной строке: sed's / ([^a] *) a/\1c/g'
Каждый второй шаблон (только одно соответствие шаблона на строку может появиться. если два или больше соответствия на одну строку появятся, только второй будет заменен),
echo -e "test\nreplace_me\ntest\ntest\nreplace_me\nreplace_me\nreplace_me" | \
sed '/replace_me/{:a;N;/replace_me.*replace_me/!Ta;s/replace_me/replaced/2;}'
Простая интерпретация:
В первой строке, содержащей хотя бы одно вхождение ШАБЛОНА, вы хотите проигнорировать его и напечатать строку как есть. Во второй строке, содержащей хотя бы одно вхождение ШАБЛОНА, вы хотите заменить первый экземпляр ШАБЛОНА на ЗАМЕНУ. В третьей строке, содержащей хотя бы одно вхождение ШАБЛОНА, вы хотите напечатать строку как есть. В четвертой строке, содержащей хотя бы одно вхождение ШАБЛОНА, вы хотите заменить первый экземпляр ШАБЛОНА на ЗАМЕНУ. И так далее. Строки, не соответствующие ШАБЛОНУ, следует печатать без изменений.
Это можно легко сделать с помощью Sed следующим образом:
sed -e '/PATTERN/ { :inside' -e 'n;s//REPLACEMENT/;t' -e 'b inside' -e '}'
Или с меньшим количеством пробелов и более короткой меткой:
sed -e '/PATTERN/{:i' -e 'n;s//REPLACEMENT/;t' -e 'b i' -e '}'
РЕДАКТИРОВАТЬ: Я просто перечитал вопрос и заметил более сложную интерпретацию:
Заменить второе вхождение ШАБЛОН во всем документе с ЗАМЕНА, независимо от того, встречается ли он в той же строке, что и первое вхождение, или нет. Оставьте первое и третье вхождения без изменений. И т.д.
Я считаю, что это также можно сделать с помощью Sed, хотя это НАМНОГО сложнее, и я считаю, что это зависит от используемого регулярного выражения. Я постараюсь что-то придумать и опубликовать, но пока я оставлю этот ответ в простой версии выше.
Вы были очень близки, просто пропустите первую строчку:
sed '1n;s/pattern/replacement/;n'
Почему awk
должен быть лучшим инструментом в этом случае?
sed -e 'n;s/2004-2009/6e législature/g'
который решил мою проблему. – Matthieu Riegler 01.08.2012, 15:27