我有一个文件包含这些内容
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
模式中给定的字符串?
4条答案
按热度按时间cidc1ykv1#
请尝试以下操作(也可以使用
grep
,因为问题是关于awk
的,所以请使用它)。^
检查线是否从ID=
开始。ID="
以确保它只匹配ID=
字符串,而不是其他任何字符串。VERSION_ID=
不会匹配,因为它不是从ID
开始,它包含ID,这就是为什么我们在条件检查中使用^
。awk
作用于pattern
/condition
的方法,然后作用于action
,因此此处未提及任何操作,这就是将打印当前行的默认操作的原因。nlejzf6q2#
如果愿意,您可以使用
awk
,但此作业的常规工具只是grep
,其中的REGEX锚定在行的开头,例如。(that并不意味着使用
awk
有什么问题,但通常在这里您会认为是grep
。我假设您正在解析的文件是/etc/os-release
)lyfkaqu13#
使用此选项进行精确匹配:
输出:
如果需要字段分隔符为其他内容,请用途:
f0ofjuux4#
您的
awk
代码与^
完美匹配: