首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用awk仅匹配给定的字符串,而不匹配任何其他字符串

如何使用awk仅匹配给定的字符串,而不匹配任何其他字符串
EN

Stack Overflow用户
提问于 2020-11-10 14:54:59
回答 4查看 76关注 0票数 1

我有一个包含以下内容的文件

代码语言:javascript
运行
复制
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"

我只需要awk ID="centos"部分。我试过了:

代码语言:javascript
运行
复制
awk /ID=/{print} file.txt

但这同时给出了ID="centos"VERSION_ID="7"输出

如何只对模式中给定的字符串执行awk操作?

EN

回答 4

Stack Overflow用户

发布于 2020-11-10 14:57:00

你可以尝试一下吗(因为问题是关于awk的,所以也可以使用grep)。

代码语言:javascript
运行
复制
awk '/^ID="/' Input_file

  • 使用锚定^检查行是否从ID=.
  • Then开始添加ID=",以确保它只匹配ID=字符串,而不是其他任何内容。
  • 为什么字符串VERSION_ID=不匹配,因为它不是从ID开始的,它包含ID,这就是为什么我们在我们的条件中使用^pattern/condition then action的方法上工作,因此此处不会提及任何操作,这就是为什么将发生当前行的默认打印操作。
票数 4
EN

Stack Overflow用户

发布于 2020-11-10 15:15:00

如果你愿意,你也可以使用awk,但是这个作业的普通工具是简单的grep,并将其锚定在行的开头,例如

代码语言:javascript
运行
复制
$ grep '^ID=' /etc/os-release
ID="centos"

(这并不意味着使用awk有任何错误,但通常在这里您会认为是grep。我假定您正在解析的文件是/etc/os-release)

票数 4
EN

Stack Overflow用户

发布于 2020-11-10 15:21:22

您使用^编写的awk代码非常完美:

代码语言:javascript
运行
复制
awk /^ID=/{print} file
ID="centos"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64764172

复制
相关文章

相似问题

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