egrep 将引号中的字符分组

egrep 将引号中的字符分组

我想从发布信息文件中获取我的系统的“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)

相关内容