
Я получаю текстовый файл apt-get --print-uris dist-upgrade > /mnt/URIs.txt
, я хочу загрузить все пакеты с URL-адресами, предоставленными текстовым файлом, только текст между '' является URL-адресом, как удалить остальное, так как для загрузки через интернет-браузер используются только URL-адреса и символы возврата.
решение1
Вывод apt-get --print-uris dist-upgrade
может выглядеть примерно так:
Reading package lists...
Building dependency tree...
Reading state information...
Calculating upgrade...
The following packages will be upgraded:
evolution-data-server evolution-data-server-common gir1.2-goa-1.0
gnome-online-accounts libcamel-1.2-62 libebackend-1.2-10 libebook-1.2-20
libebook-contacts-1.2-3 libecal-2.0-1 libedata-book-1.2-26
libedata-cal-2.0-1 libedataserver-1.2-24 libedataserverui-1.2-2
libgoa-1.0-0b libgoa-1.0-common libgoa-backend-1.0-1 libyelp0 linux-libc-dev
python-apt-common python3-apt yelp
21 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 4,358 kB of archives.
After this operation, 16.4 kB of additional disk space will be used.
'http://se.archive.ubuntu.com/ubuntu/pool/main/p/python-apt/python-apt-common_2.0.0ubuntu0.20.04.5_all.deb' python-apt-common_2.0.0ubuntu0.20.04.5_all.deb 17052 MD5Sum:a9e11f5f8671c5069f5edaef32e2f620
'http://se.archive.ubuntu.com/ubuntu/pool/main/p/python-apt/python3-apt_2.0.0ubuntu0.20.04.5_amd64.deb' python3-apt_2.0.0ubuntu0.20.04.5_amd64.deb 154164 MD5Sum:8590dd473b444f2756e5c7498e00e7ec
'http://se.archive.ubuntu.com/ubuntu/pool/main/g/gnome-online-accounts/libgoa-1.0-common_3.36.1-0ubuntu1_all.deb' libgoa-1.0-common_3.36.1-0ubuntu1_all.deb 3752 MD5Sum:9252da969452bdf88527829a752ac175
(этот вывод усечен)
Если вы хотите разобрать "чистые" URI из вышеприведенного, следующая sed
команда удалит все строки от первой до той, которая начинается со строки After
(включительно). Из оставшихся строк она удалит все после пробела, а затем удалит первый и последний символы из измененной строки (это удалит одинарные кавычки, окружающие URI).
sed '1,/^After/d; s/ .*//; s/.//; s/.$//'
Использую это в моем коротком примере выше:
$ sed '1,/^After/d; s/ .*//; s/.//; s/.$//' file
http://se.archive.ubuntu.com/ubuntu/pool/main/p/python-apt/python-apt-common_2.0.0ubuntu0.20.04.5_all.deb
http://se.archive.ubuntu.com/ubuntu/pool/main/p/python-apt/python3-apt_2.0.0ubuntu0.20.04.5_amd64.deb
http://se.archive.ubuntu.com/ubuntu/pool/main/g/gnome-online-accounts/libgoa-1.0-common_3.36.1-0ubuntu1_all.deb
При тех же входных данных команда
sed -n "s,.*\(http://[^']*\).*,\1,p" file
Также будет работать. Это пытается сопоставить любую подстроку, которая начинается с http://
одинарной кавычки и заканчивается перед ней. Затем она заменяет всю строку этой подстрокой и выводит измененную строку. Несовпадающие строки отбрасываются.