匹配精确的字符串

匹配精确的字符串

我正在使用 AWS cli 从我的 AWS 账户中提取一些数据。我无法提取确切的字符串。当我发出以下命令时:-

aws ec2 describe-instances --output text --query 'Reservations[*].Instances[*].[ [Tags[?Key==`Name`].Value] [0][0], [Tags[?Key==`Operating System`].Value] [0][0], [Tags[?Key==`Environment`].Value] [0][0], InstanceId, InstanceType,VpcId, State.Name, PrivateIpAddress, PublicIpAddress]
'| column -t | grep production

我得到的输出为

 sftp_gateway_instance        rhel     production  i-0aec9xxxxxxxxxxxd  t2.xlarge   vpc-zzzzzz1b  running  2.3.4.5    3.2.1.2
 abc-production-nav-1         rhel     production  i-0e4xxxxxxxxxxxxx3  t2.xlarge   vpc-zzzzzz1b  running  1.1.6.5    None
 xyz-produ-nav                rhel     production  i-0xxxxxxxxxxxxxx18  t2.xlarge   vpc-zzzzzz1b  running  2.8.0.4    None
 solutions-production-navi    centos   uat         i-08fffffffffff86c8  t2.large    vpc-zzzzzz1b  running  2.8.9.2    None

在上面提供的输出中,我不需要最后一行,因为实例名称中提到了生产,而不是环境列中。

我尝试了下面的 awk 命令,但在这种情况下,输出不会以正确的列格式出现

aws ec2 describe-instances --output text --query 'Reservations[*].Instances[*].[ [Tags[?Key==`Name`].Value] [0][0], [Tags[?Key==`Operating System`].Value] [0][0], [Tags[?Key==`Environment`].Value] [0][0], InstanceId, InstanceType,VpcId, State.Name, PrivateIpAddress, PublicIpAddress]
'| awk -F ' ' '$3 == "production" {print $1 "\t\t" $2 "\t" $3"\t" $4"\t" $5"\t" $6"\t" $7"\t" $8"\t" $9 }' 

这种情况下的输出如下:-

abc-production  centos  production  i-xyzabcdef t2.xlarge   vpc-xyzabc  running 2.18.1.0    None
doc-pdf-prod windows production i-xyzabcdef t2.large    vpc-xyzabc  running 172.18.70.229   None

我想要正确的列格式的输出,就像我使用 grep 得到的上面的输出一样。有人可以建议为此做些什么吗?

答案1

使用 ,而不是grep production匹配其中包含“生产”的任何行,而使用awk '$3 == "production"',它仅匹配第三个字段为“生产”的行。

不需要在awk: 中进一步执行任何操作,默认情况下它将打印整个匹配行。

相关内容