LinuxMint основан на Debian, который, очевидно, не имеет инструмента для этого. Вы можете переустановить соответствующие пакеты, как описано в Восстановление прав доступа в системе Debian. Это переустанавливает всё:
sudo apt-get --reinstall install `dpkg --get-selections | grep install | grep -v deinstall | cut -f1`
Если бы это была система на базе RPM, в принципе, можно было бы проверить наличие изменённых пакетов и уменьшить боль от переустановки. Переустановка пакетов в Debian, однако, менее болезненна, чем первоначальная установка.
Если вы хотите определить пакеты, которые вы недавно установили, вы можете сделать это с помощью поиска в журналах dpkg, как описано в Список пакетов по дате установки.
Вsed
:
sed -r 's/(.* |^)([^ ]*) has address ([^ ]*)(.*|$)/\2,\3/' myfile > newfile
sed -r 's/foo/bar/' myfile > newfile
:используйте sed
с «расширенными регулярными выражениями» (-r
), поэтому нам не нужно экранировать группы захвата ()
ниже. Замените вхождения foo
на bar
. Чтение из myfile
и запись в newfile
. (.* |^)([^ ]*) has address ([^ ]*)(.*|$)
:найдите строку has address
, перед и после которой следует пробел. До и после этого должна быть строка без пробелов, которую мы должны захватить в группу ([^ ]*)
. Перед ведущим словом должен стоять либо пробел (, которому предшествует что угодно, .*
), либо начало строки, т. е. (.* |^)
. После следующего слова должен быть либо пробел (, за которым следует .*
), либо конец строки, т.е. (.*|$)
. \2,\3
:выражение выше захватывает всю строку, поэтому замените его второй и третьей захватывающими группами, то есть словом до и после has address
. Вawk
:
awk -v OFS=, '
{
for(i=1;i<NF;i++){
j=i+1;
if ($i=="has" && $j=="address") {
domain=i-1;
ip=i+2;
print $domain,$ip;
break;
}
}
}'
Просматривает поля в цикле, и если он находит «имеет», а следующим полем является «адрес», он печатает поля до и после этого с ,
в качестве разделителя полей вывода.
Использование grep
иsed
:
grep -o '[^ ]* has address [^ ]*' | sed 's/ has address /,/'
Мне нравится этот, потому что он такой простой.
Пояснение:
grep
выводит только совпадающую(-o
)часть каждой строки, которая находит следующий шаблон:
[^ ]*
), за которым следует has address
, за которым снова следует любой символ, не являющийся пробелом([^ ]*
). sed
просто заменит has address
на,