'Grep output based on regex: multiline with space bash
I have the following output from my command. I am trying to extract the id from the text if possible as a one liner
# module.mongodb_atlas.mongodbatlas_project_ip_whitelist.vpc-whitelist["10.3.0.3/17"]:
resource "mongodbatlas_project_ip_whitelist" "vpc-whitelist" {
cidr_block = "10.3.0.0/17"
comment = "External access from '10.3.0.3/17' to the MongoDB Atlas"
id = "dffgsgsnk=:sdgsdg=-cHJvamVjdF9pZA==:sdfsdfs"
project_id = "sdsdss"
timeouts {}
}
I am trying to get the id from the above text using bash.
I tried converting the output to json but it did not work as the output can have different formats which would make it difficult.
echo $json| tail -n +3 | sed 's/[[:blank:]]//g' i removed the empty space. But the sed part of extracting the id= hasnt worked.
echo $json| tail -n +3 | sed 's/[[:blank:]]//g' | sed -e '/id=/!d'
I also tried different ways of grep to get the id but nothing worked. Everything gave an empty string. grepwith id would give me 3 lines as output so i need id= to be the matching string
echo $json| tail -n +3 | sed 's/[[:blank:]]//g' | grep 'project_id'
project_id="dfgdfg"
echo $json| tail -n +3 | sed 's/[[:blank:]]//g' | grep '="' (Once i add id=" here nothing comes up)
cidr_block="10.3.0.3/17" comment="Externalaccessfrom'10.3.0.3/17'totheMongoDBAtlas" id="ZW50cnk=:fdgdfg=-dfg==:dg" project_id="dfgdfg"
Solution 1:[1]
Using sed
$ sed -n '/\<id\>/ {s/[^"]*"\([^"]*\).*/\1/p}' <<< "$json"
dffgsgsnk=:sdgsdg=-cHJvamVjdF9pZA==:sdfsdfs
Solution 2:[2]
using awk, without converting it to json:
awk '/\yid\y/ { gsub(/"/, "");print $3}' file
/\yid\y/exact match of the id wordgsub(/"/, "")quotes removalprint $3print the id field
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | HatLess |
| Solution 2 |
