Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 24/06/2020, à 07:14

lynn

awk : mettre une espace entre deux caractères

Bonjour,

Dans le cadre d'un autre projet, j'envisage d'utiliser cette commande :

awk -F'[= ]' '/(PRETTY_NAME|VERSION_ID)/{gsub(/["]/,"");printf $2 }' /etc/os-release

Pour Ubuntu 20.04, ça renvoie

Ubuntu20.04

Y a-t-il une solution simple afin de mettre une espace entre Ubuntu et 20.04 ?

Merci. smile

Dernière modification par lynn (Le 24/06/2020, à 07:15)


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#2 Le 24/06/2020, à 07:45

nany

Re : awk : mettre une espace entre deux caractères

Bonjour,


Il y a peut-être plus simple mais voilà ce que j’ai trouvé avec awk :

awk -F'[= "]' '/PRETTY_NAME/{os=$3" "};/VERSION_ID/{os=os$3};END{print os}' /etc/os-release

Hors ligne

#3 Le 24/06/2020, à 08:18

lynn

Re : awk : mettre une espace entre deux caractères

Parfait !

Merci beaucoup nany. smile


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#4 Le 24/06/2020, à 08:38

pingouinux

Re : awk : mettre une espace entre deux caractères

Bonjour,
Autres solutions :

awk -F'"' '/PRETTY_NAME/{gsub(/\.[0-9]+ .*/,"",$2);print $2}' /etc/os-release
sed -rn '/PRETTY_NAME/s/^[^"]+"|\.[0-9]+ .*//gp' /etc/os-release
grep -Po '(?<=PRETTY_NAME=").*(?=\.\d+ .*)' /etc/os-release

Hors ligne

#5 Le 24/06/2020, à 17:37

lynn

Re : awk : mettre une espace entre deux caractères

Merci pour vos réponses.

@pingouinux
Les deux premières commandes me renvoie tout ce qu'il y a après le premier signe égal... Je ne souhaiterais que le nom et la version.
La troisième commande ne me renvoie rien.

@MicP
J'avais bien pensé à la commande lsb_release mais elle n'est pas disponible nativement sur certaines distributions. Par contre, le fichier /etc/os-release semble être une constante. C'est pourquoi, je privilégie celui ci afin de récupérer les infos voulues mais bon, c'est moins simple...


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#6 Le 24/06/2020, à 17:50

lynn

Re : awk : mettre une espace entre deux caractères

@nany
Ta commande fonctionne bien sur les *buntu par contre pour certains fichiers os-release, le nom et la version de la distribution ne sont pas entourés de guillemets et donc la commande ne fonctionne plus sauf à changer $3 par $2...


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#7 Le 24/06/2020, à 18:02

pingouinux

Re : awk : mettre une espace entre deux caractères

lynn #6 a écrit :

@pingouinux
Les deux premières commandes me renvoie tout ce qu'il y a après le premier signe égal... Je ne souhaiterais que le nom et la version.
La troisième commande ne me renvoie rien.

Dans ce cas, montre le contenu de ton /etc/os-release. Chez moi ça fonctionne.

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.6 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.6 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial
$ awk -F'"' '/PRETTY_NAME/{gsub(/\.[0-9]+ .*/,"",$2);print $2}' /etc/os-release
Ubuntu 16.04

$ sed -rn '/PRETTY_NAME/s/^[^"]+"|\.[0-9]+ .*//gp' /etc/os-release
Ubuntu 16.04

$ grep -Po '(?<=PRETTY_NAME=").*(?=\.\d+ .*)' /etc/os-release
Ubuntu 16.04

Hors ligne

#8 Le 24/06/2020, à 18:15

lynn

Re : awk : mettre une espace entre deux caractères

Le fichier os-release d'Ubuntu 20.10

NAME="Ubuntu"
VERSION="20.10 (Groovy Gorilla)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu Groovy Gorilla (development branch)"
VERSION_ID="20.10"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=groovy
UBUNTU_CODENAME=groovy

et sous Ubuntu 20.04 les trois commandes me renvoient ça

Ubuntu 20

Le fichier os-release

NAME="Ubuntu"
VERSION="20.04 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#9 Le 24/06/2020, à 18:53

pingouinux

Re : awk : mettre une espace entre deux caractères

Cette commande donne le bon résultat pour ma 16.04 et ta 20.04 :

grep -Po '(?<=PRETTY_NAME=").* \d+\.\d+(?=(\.\d+)? .*)' /etc/os-release

Elle ne traite que la ligne PRETTY_NAME=, qui ne contient pas le numéro de version dans ta 20.10.

Hors ligne