caracteres do grupo egrep na citação

0

Quero receber "PRETTY_NAME" do meu sistema do arquivo de informações da versão. Eu usei este comando no meu arquivo bash para obtê-lo:

SYS_VERSION=$(cat /etc/*-release | egrep  "^PRETTY_NAME=(.*[a-zA-Z]+.*)$")

Ele retorna toda a linha:

PRETTY_NAME="Ubuntu 16.04.3 LTS"

Mas eu só quero os personagens dentro da citação dupla.

    
por Zeinab Abbasimazar 16.08.2017 / 14:19

5 respostas

2

Use sed :

sed '/^PRETTY_NAME=/!d;s///;s/"//g' /etc/*-release

O primeiro comando apaga todas as linhas que não começam com PRETTY_NAME= , a segunda remove o dito padrão (padrão vazio significa usar último padrão), o terceiro remove as aspas.

    
por 16.08.2017 / 14:26
3

Usando lsb_release :

$ lsb_release -ds
Ubuntu 17.04

ou, em um script,

sys_descr=$( lsb_release -ds )
printf 'This is a "%s" system\n' "$sys_descr"

lsb_release analisa o arquivo /etc/os-release . O -d flag lhe dará a "descrição" do sistema, que é exatamente o que PRETTY_NAME in /etc/os-release fornece. O -s sinalizador lhe dará saída sem nenhum cabeçalho.

Consulte os manuais de lsb_release e os-release .

    
por 16.08.2017 / 14:28
2

Com uma única expressão sed :

sed -n 's/PRETTY_NAME="\(.*\)"//p' /etc/*release

A saída:

Ubuntu 16.04.3 LTS

No seu caso, seria parecido com:

SYS_VERSION=$(sed -n 's/PRETTY_NAME="\(.*\)"//p' /etc/*release)
    
por 16.08.2017 / 14:26
2

você pode usar awk -F '"' '{print $2}'

    
por 16.08.2017 / 14:27
1

Você pode enviar seu comando para cut -d '"' -f2 :

SYS_VERSION=$(cat /etc/*-release | egrep  "^PRETTY_NAME=(.*[a-zA-Z]+.*)$" | cut -d '"' -f2)
    
por 16.08.2017 / 14:28