我有一个包含以下内容的文件
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操作?
发布于 2020-11-10 14:57:00
你可以尝试一下吗(因为问题是关于awk的,所以也可以使用grep)。
awk '/^ID="/' Input_file^检查行是否从ID=.ID=",以确保它只匹配ID=字符串,而不是其他任何内容。VERSION_ID=不匹配,因为它不是从ID开始的,它包含ID,这就是为什么我们在我们的条件中使用^在pattern/condition then action的方法上工作,因此此处不会提及任何操作,这就是为什么将发生当前行的默认打印操作。发布于 2020-11-10 15:15:00
如果你愿意,你也可以使用awk,但是这个作业的普通工具是简单的grep,并将其锚定在行的开头,例如
$ grep '^ID=' /etc/os-release
ID="centos"(这并不意味着使用awk有任何错误,但通常在这里您会认为是grep。我假定您正在解析的文件是/etc/os-release)
发布于 2020-11-10 15:21:22
您使用^编写的awk代码非常完美:
awk /^ID=/{print} file
ID="centos"https://stackoverflow.com/questions/64764172
复制相似问题