首页 > 解决方案 > 如何使用 awk 仅匹配给定字符串而不匹配其他任何内容

问题描述

我有这个文件包含这些内容

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"一部分。我试过了:

awk /ID=/{print} file.txt

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

如何仅awk在模式中给出字符串?

标签: linuxawk

解决方案


您能否尝试关注(grep也可以使用,因为问题是awk这样的)。

awk '/^ID="/' Input_file
  • 使用锚^来检查行是否从ID=.
  • 然后添加ID="以确保它只匹配ID=字符串而不是其他任何东西。
  • 为什么字符串VERSION_ID=不会被匹配,因为它不是从ID包含 ID 开始的,这就是我们^在条件检查中使用的原因。
  • awk适用于pattern/ conditionthen的方法,action所以这里没有提到任何动作,这就是为什么会发生当前行的默认动作打印。

推荐阅读