首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从多行文件中提取子字符串

如何从多行文件中提取子字符串
EN

Stack Overflow用户
提问于 2016-11-10 17:31:46
回答 2查看 3.7K关注 0票数 3

我正在尝试从/etc/ OS -发布中提取os名称,其中包含:

代码语言:javascript
运行
复制
...
NAME="Os Name"
...

但当我执行:

代码语言:javascript
运行
复制
sed 's/.*NAME="\([^"]*\).*/\1/' /etc/os-release

它正确地捕获Os名称,但它只打印捕获的字符串的所有其他行整数,为什么?

os发布文件的内容

代码语言:javascript
运行
复制
cat /etc/os-release 
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“但输出所有行的Sed命令:

代码语言:javascript
运行
复制
$ sed 's/.*NAME="\([^"]*\).*/\1/' /etc/os-release
CentOS Linux
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
CentOS Linux 7 (Core)
ANSI_COLOR="0;31"
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"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-10 17:37:12

可以使用-n选项在s命令中抑制常规输出和/p模式,以便在特定行上打印结果:

代码语言:javascript
运行
复制
sed -nE 's/^NAME="([^"]+)".*/\1/p' /etc/os-release

CentOS Linux

您还可以使用awk:

代码语言:javascript
运行
复制
awk -F '["=]+' '$1=="NAME"{print $2}' /etc/os-release

CentOS Linux

或者使用grep -oP

代码语言:javascript
运行
复制
grep -oP '^NAME="\K[^"]+' /etc/os-release
票数 7
EN

Stack Overflow用户

发布于 2016-11-10 17:37:31

你不需要sed。只有grepcut应该这么做。

代码语言:javascript
运行
复制
$ grep "^NAME=" /etc/os-release | cut -d\= -f2
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40533715

复制
相关文章

相似问题

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