Linux

匹配確切的字元串

  • May 7, 2018

我正在使用 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 獲得的上述輸出。誰能建議為此可以做些什麼?

代替grep production,它匹配其中包含“生產”的任何行,使用awk '$3 == "production"',它只匹配第三個欄位是“生產”的行。

在 : 中不需要任何進一步的內容awk,預設情況下它將列印整個匹配行。

引用自:https://unix.stackexchange.com/questions/442393