Megfelelő módszer a mintához illeszkedő telepített csomagok listájának megszerzésére?

Én (egy meglehetősen friss) Debian-alapú disztribúciót futtató rendszeren vagyok.

Szeretnék sima szót generálni egy adott mintának megfelelő összes telepített csomag listája. Ezt megtehetem futással, mondjuk

apt list --installed "linux-image-*" | cut -d/ -f1 

, de olyan sorokat kapok, amelyek nem érdekelnek, például:

WARNING: apt does not have a stable CLI interface. Use with caution in scripts. Listing... 

Tehát talán jobb, ha nem használom a apt fájlt. A dpkg-query futtatását így tudom végrehajtani:

dpkg-query --showformat="${Package}\n" --show "linux-image*" 

de ez nem korlátozódik a telepített csomagokra. Használhatnám

dpkg-query --list "linux-image-*" | grep "ii" 

de akkor egy csomó szövegfeldolgozást kellene elvégeznem, és ki bízhat meg ezekben a helyekben, igaz?

Tehát, végső sor: Mi a jobb módja a mintának megfelelő telepített csomagok listájának megszerzéséhez?


Megjegyzés :

  • Bónuszpontok, ha ez megfelelő regexp lehet, nem csak shell-globusz.
  • A szöveg elemzése az ideálisnál kevesebb megoldásnak tűnik; ha ezt javasolja, kérem, érveljen, miért nincs jobb módszer.

Válasz

aptitude támogatja a keresést a csomagkezelő eszközök által ismert telepített vagy egyéb csomagok között, reguláris kifejezések használatával , idegen kimenet nélkül, és meg lehet mondani, hogyan formázzuk a kimenetét:

Csak a telepített csomagok felsorolásához:

aptitude search "linux-image-.* ~i" 

Csak a telepített csomagok nevek illeszkedik a reguláris kifejezéshez:

aptitude search "linux-image-.* ~i" -F "%p" 

A dokumentáció a rendelkezésre álló keresési mintákat és kimeneti formátum-specifikátorok részletesen. Ezen a webhelyen is talál példákat, például: van-e mód arra, hogy a regexpet használjuk aptitude-val? , regexp a aptitude 2. részével , és a Linux – a biztonsági frissítéseket csak az apt használatával jelenítheti meg vagy frissítheti.

Válasz

$ apt list --installed "linux-image-*" 2>/dev/null |awk -F"/" "NR>1{print $1}" linux-image-3.16.0-4-amd64 linux-image-4.11.0-1-amd64 linux-image-4.12.0-1-amd64 linux-image-4.13.0-1-amd64 linux-image-4.8.0-2-amd64 linux-image-4.9.0-1-amd64 linux-image-4.9.0-2-amd64 linux-image-4.9.0-3-amd64 

A regexről beszélünk:

$ apt list --installed "linux-image-*" 2>/dev/null |awk -F"/" "NR>1 && $0~/4.1/{print $1}" linux-image-4.11.0-1-amd64 linux-image-4.12.0-1-amd64 linux-image-4.13.0-1-amd64 

Használhatja a dpkg-query fájlt a -f (–showformat) opcióval is, amely csomagnév nélküli meghívás esetén alapértelmezés szerint csak telepített csomagokat használ fel vannak sorolva.

$ dpkg-query -f "${Package}\n" -W |grep "linux-image" #-W == --show 

Megjegyzések

  • " Az |awk -F'/' 'NR>1{print $1}' hozzáadása az apt listához "

Válasz

Itt egy jó módszer nem kapja meg a elakadt csomagok egy Debian-alapú rendszeren:

dpkg -l | grep ^ii | awk "{print $2}" 

Az dpkg -l kimeneti sorai megbízhatóan megbízhatóak . A ^ii minta illeszkedik a telepített csomagok soraihoz, és az egyszerű Awk kivonja a második oszlopot, a csomagok nevét (ugyanazok a nevek, amelyeket a apt-get install parancsok). A csomagnevek nem tartalmazhatnak szóközt, így ez ismét biztonságos művelet.

Megjegyzések

  • Ez akkor működik, ha verzió szerint akarsz grepelni. A válaszok aptitude search és apt list szavakkal ebben az esetben ne ' t.

Válasz

A keresett kifejezés “csapdázása” érdekében, amikor grep ping dpkg output, a keresési kifejezést az alábbiak szerint kell beágyaznia. “ git ” mintapéldány keresési kifejezésként használatos:

dpkg -l |grep "^ii git[[:space:]]" 

A karát (^) ii , majd a keresett kifejezést megelőző (2) szóköz biztosítja, hogy semmi A ELŐTT a karakterkombinációtól eltérő lehet.

A [[:space:]] a keresett kifejezés mellé állítva kizárja a részleges egyezések előfordulását azáltal, hogy csak a szóközök azonnal megegyeznek azt követően.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük