Получить URL-адреса из текста

Получить URL-адреса из текста

Я получаю текстовый файл 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://одинарной кавычки и заканчивается перед ней. Затем она заменяет всю строку этой подстрокой и выводит измененную строку. Несовпадающие строки отбрасываются.

Связанный контент