Используйте Awk или режим абзаца Perl для обработки абзаца файла абзацем, где абзацы разделяются пустыми строками.
awk -vRS= '
NR!=1 {print ""} # print blank line before every record but the first
{ # do this for every record (i.e. paragraph):
gsub(" *\n *"," "); # replace newlines by spaces, compressing spaces
sub(" *$",""); # remove spaces at the end of the paragraph
print
}
'
perl -000 -pe ' # for every paragraph:
print "\n" unless $.==1; # print a blank line, except before the first paragraph
s/ *\n *(?!$)/ /g; # replace newlines by spaces, compressing spaces, but not at the end of the paragraph
s/ *\n+\z/\n/ # normalize the last line end of the paragraph
'
Конечно, так как это не анализирует (La) TEX, он ужасно искалечит комментарии, дословные среды и другой специальный синтаксис. Можно хотеть изучить DeTeX или другие преобразователи (La)TeX-to-text.
Можно использовать app-portage/genlop
для этого.
genlop -l --date some_date
перечислит все пакеты, объединенные на или после той даты. (Можно также указать дату окончания.)
Получить список пакетов, подходящих для emerge --unmerge
, попробуйте что-то как:
genlop -ln --date 2011/10/02 | perl -ne '/>>> (.*)/ and print " =$1";'
Действительно перепроверьте тот список, прежде чем на самом деле неслияние, удаление системных пакетов случайно не будет забавой.
Другой способ получить список вещей, объединенных после данной даты, смотрит на BUILD_TIME
сохраненный в базе данных перевозки.
#!/bin/bash
stime=$(date -d "$1" +%s)
for dir in /var/db/pkg/*/* ; do
if [ -f $dir/BUILD_TIME ] ; then
btime=$(<$dir/BUILD_TIME)
if [ $btime -ge $stime ] ; then
package=$(basename $dir)
category=$(basename $(dirname $dir))
echo $category/$package
fi
fi
done
Назовите это с датой (т.е. ./script "2001/09/30 21:32"
) и Вы получите список пакетов, объединенных с тех пор.
Перевозка не хранит, было ли слияние новой установкой или обновлением в его базе данных. Вы могли восстановить ту информацию от emerge.log
файл, принимающий Вас, имеет историю всей Вашей системы там.
Более простой способ обработать все это состоял бы в том, чтобы использовать наборы пакета. Создайте набор каждый раз, когда Вы испытываете новый рецепт и использование что сделать Ваши очистки. (Depclean все еще необходим.)
# echo dev-perl/IO-AIO > /etc/portage/sets/my_set
# emerge -a @my_set
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild N ] dev-perl/IO-AIO-2.33
Would you like to merge these packages? [Yes/No] y
>>> Recording @my_set in "world" favorites file...
...
>>> Installing (1 of 1) dev-perl/IO-AIO-2.33
>>> Auto-cleaning packages...
>>> No outdated packages were found on your system.
* GNU info directory index is up-to-date.
# emerge -a --unmerge @my_set
* This action can remove important packages! In order to be safer, use
* `emerge -pv --depclean <atom>` to check for reverse dependencies before
* removing packages.
>>> These are the packages that would be unmerged:
dev-perl/IO-AIO
selected: 2.33
protected: none
omitted: none
All selected packages: dev-perl/IO-AIO-2.33
>>> 'Selected' packages are slated for removal.
>>> 'Protected' and 'omitted' packages will not be removed.
Would you like to unmerge these packages? [Yes/No]
genlop
полагается на парсинг файлов журнала перевозки и не отражает состояние существующей системы, таким образом, его вывод уже включает удаленные пакеты, и некоторые пакеты включены многократно, поскольку они были установлены многократно и существуют также некоторые пакеты, включенные, который, оказалось, был обновлен одновременно период. Так, в конце концов, я все еще должен проверить все пакеты один за другим, чего я стараюсь избегать. – AlexD 02.10.2011, 12:26/var/pkg/db
намного лучше. Я изменил Ваш сценарий для использованияequery depends
пропускать пакеты, которые имеют что-либо, зависело от них так, я мог получить список пакетов, который безопасно удалить, не повреждая другие пакеты. Наборы являются интересной функцией, но она не могла решить вариант использования, когда пакет, включенный в набор, также используется некоторым другим пакетом, который не включен в набор, так удаление набора повредило бы этот другой пакет. – AlexD 07.10.2011, 10:08www-clients/firefox
получения по запросу в наборе зависимостей, но очень немного пакетов зависят от него. Еслиwww-clients/firefox
иmedia-libs/mesa
находятся в том же наборе, Вы могли просто идти вперед и удалитьmedia-libs/mesa
. Когда Вы не объединяетесь, мезаструктура набора не удалить. Только, когда Вы работаетеemerge --depclean
это удалить и только если никакому другому миру или пакетам набора не нужен он. – hololeap 16.09.2014, 22:55--oneshot
флаг, чтобы не помещать пакеты в "мировой" набор (эффективно подразумевать, что они будут удалены в следующий раз, Вы работаетеemerge --depclean
), когда использовать пользовательские наборы, и когда записать Ваш собственный ebuilds для неофициального программного обеспечения (так, чтобы можно было постоянно установить любые зависимости библиотеки, не добавляя их к "мировому" набору). – hololeap 16.09.2014, 22:59