Holen Sie sich die URLs aus dem Text

Holen Sie sich die URLs aus dem Text

Ich erhalte eine Textdatei apt-get --print-uris dist-upgrade > /mnt/URIs.txtund möchte alle Pakete mit den in der Textdatei angegebenen URLs herunterladen. Nur der Text zwischen den „“ ist eine URL. Wie entferne ich den Rest, da zum Herunterladen durch den Internetbrowser nur URLs und Return-Symbole verwendet werden?

Antwort1

Die Ausgabe von apt-get --print-uris dist-upgrademay sieht ungefähr so ​​aus:

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

(diese Ausgabe ist gekürzt)

Angenommen, Sie möchten die „sauberen“ URIs aus dem obigen Code herausfiltern, sedwürde der folgende Befehl alle Zeilen von der ersten bis zur Zeile löschen, die mit der Zeichenfolge beginnt After(einschließlich). In den verbleibenden Zeilen würde er alles nach dem Leerzeichen löschen und dann das erste und letzte Zeichen aus der geänderten Zeile löschen (dadurch würden die einfachen Anführungszeichen um die URIs gelöscht).

sed '1,/^After/d; s/ .*//; s/.//; s/.$//'

Ich verwende dies für die Ausgabe meines kurzen Beispiels oben:

$ 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

Bei den gleichen Eingabedaten kann der Befehl

sed -n "s,.*\(http://[^']*\).*,\1,p" file

würde auch funktionieren. Dabei wird versucht, alle Teilzeichenfolgen abzugleichen, die mit http://einem einfachen Anführungszeichen beginnen und vor einem solchen enden. Anschließend wird die gesamte Zeile durch diese Teilzeichenfolge ersetzt und die geänderte Zeile gedruckt. Nicht übereinstimmende Zeilen werden verworfen.

verwandte Informationen