首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带子壳的Bash坏替换

带子壳的Bash坏替换
EN

Stack Overflow用户
提问于 2017-01-17 12:34:54
回答 2查看 365关注 0票数 0

我正在试着在没有引号的情况下得到地区名称。

cat /etc/*-release | grep "NAME=.*" -o | cut -d "=" -f2 | head -n1

返回:"CentOS Linux"

现在,使用shell替换,我尝试删除将命令放在子shell中的引号:

代码语言:javascript
运行
复制
echo ${$(cat /etc/*-release | grep "NAME=.*" -o | cut -d "=" -f2 | head -n1)/\"}

我在想,我可以使用\"转义引号,然后省略最后一个/,只需删除引号。

编辑:我知道这可以用awk来完成,但我不知道怎么做。

编辑:cat /etc/*-release的输出

代码语言:javascript
运行
复制
CentOS Linux release 7.2.1511 (Core)
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

CentOS Linux release 7.2.1511 (Core)
CentOS Linux release 7.2.1511 (Core)

预期输出: CentOS Linux

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-17 12:44:01

使用awk,获取NAME变量后面的操作系统名称。

代码语言:javascript
运行
复制
awk -F"=" '$1=="NAME"{gsub(/"/, "", $2);print $2; exit}' /etc/os-release 
CentOS Linux
票数 1
EN

Stack Overflow用户

发布于 2017-01-17 16:38:32

你的解决方案几乎行得通。"CentOS Linux"中的引号是发布文件的一部分,使用子subshell没有帮助。可以使用带有双引号的cut作为分隔符:

代码语言:javascript
运行
复制
cat /etc/*-release | grep "NAME=.*" -o | cut -d "=" -f2 | head -n1 | cut -d '"' -f2

您可以使用sed

代码语言:javascript
运行
复制
sed -n '/^NAME=/ {s/NAME="\(.*\)".*/\1/p;q}' /etc/*-release 

说明:只告诉sed打印p要求的行,寻找以NAME=开头的行,匹配引号之间的部分,并在第一行之后使用NAME=退出。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41697333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档