我想从发布信息文件中获取我的系统的“PRETTY_NAME”。我在 bash 文件中使用此命令来获取它:
SYS_VERSION=$(cat /etc/*-release | egrep "^PRETTY_NAME=(.*[a-zA-Z]+.*)$")
它返回整行:
PRETTY_NAME="Ubuntu 16.04.3 LTS"
但我只想要双引号内的字符。
答案1
使用lsb_release
:
$ lsb_release -ds
Ubuntu 17.04
或者,在脚本中,
sys_descr=$( lsb_release -ds )
printf 'This is a "%s" system\n' "$sys_descr"
lsb_release
解析/etc/os-release
文件。该-d
标志将为您提供系统的“描述”,这正是供应PRETTY_NAME
的内容/etc/os-release
。该-s
标志将为您提供没有任何标题的输出。
lsb_release
请参阅和 的手册os-release
。
答案2
使用sed
:
sed '/^PRETTY_NAME=/!d;s///;s/"//g' /etc/*-release
第一个命令删除所有不以 开头的行PRETTY_NAME=
,第二个命令删除所述模式(空模式意味着使用最后一个模式),第三个命令删除引号。
答案3
与单sed表达:
sed -n 's/PRETTY_NAME="\(.*\)"/\1/p' /etc/*release
输出:
Ubuntu 16.04.3 LTS
在你的情况下,它看起来像:
SYS_VERSION=$(sed -n 's/PRETTY_NAME="\(.*\)"/\1/p' /etc/*release)
答案4
您可以将命令通过管道传输到cut -d '"' -f2
:
SYS_VERSION=$(cat /etc/*-release | egrep "^PRETTY_NAME=(.*[a-zA-Z]+.*)$" | cut -d '"' -f2)