Filter YAML file content using sed/awkSed + how to set parameters in sed command in order to display lines from text filefilter based on a field value in awkHow can I add a column to a specific position in a csv file using cat, sed, awk or cut?How well does grep/sed/awk perform on very large files?sed/awk replace a specific pattern under another patternRegex: using awk and sed to match websites by IPvalidate file content with bash Regular Expressionsecho line with var that contains few linesextract field from file using sed or awkHow to print one line below the matching RegEx in AWK or SED
Time complexity of an algorithm: Is it important to state the base of the logarithm?
Why does Bran want to find Drogon?
“For nothing” = “pour rien”?
I want to ask company flying me out for office tour if I can bring my fiance
One word for 'the thing that attracts me'?
What is the recommended procedure to land a taildragger in a crosswind?
Dad jokes are fun
Why does splatting create a tuple on the rhs but a list on the lhs?
Are runways booked by airlines to land their planes?
Gravitational Force Between Numbers
Has Ursula Le Guin ever admitted to be influenced by Kibbutz for the Dispossessed?
Why does the hash of infinity have the digits of π?
Heat lost in ideal capacitor charging
What is the difference between LORD and GOD?
3 prong range outlet
Underwater city sanitation
How to respond to an e-mail asking me to suggest a doctoral research topic?
How would a developer who mostly fixed bugs for years at a company call out their contributions in their CV?
Using too much dialogue?
Why isn't 'chemically-strengthened glass' made with potassium carbonate? To begin with?
Can a ring of spell storing and access to Find spells produce an endless menagerie?
How was Daenerys able to legitimise Gendry?
Do copyright notices need to be placed at the beginning of a file?
Who knighted this character?
Filter YAML file content using sed/awk
Sed + how to set parameters in sed command in order to display lines from text filefilter based on a field value in awkHow can I add a column to a specific position in a csv file using cat, sed, awk or cut?How well does grep/sed/awk perform on very large files?sed/awk replace a specific pattern under another patternRegex: using awk and sed to match websites by IPvalidate file content with bash Regular Expressionsecho line with var that contains few linesextract field from file using sed or awkHow to print one line below the matching RegEx in AWK or SED
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
I have a text file with the following content in it.
$ cat hosts.yml
[prod_env]
foo.example.com
bar.example.com
[stage_env]
foo_stage.example.com
bar_stage.example.com
[dev_env]
foo_dev1.example.com
dev2_bar.example.com
I would like to filter hosts listed under [prod_env] file in bash.
I tried with sed, awk and grep with my limited knowledge, but I am not sure how to filter them.
Example: I would like to print hosts under prod_env and dev_env. so the final output would be:
foo.example.com
bar.example.com
foo_dev1.example.com
dev2_bar.example.com
awk sed yaml
add a comment |
I have a text file with the following content in it.
$ cat hosts.yml
[prod_env]
foo.example.com
bar.example.com
[stage_env]
foo_stage.example.com
bar_stage.example.com
[dev_env]
foo_dev1.example.com
dev2_bar.example.com
I would like to filter hosts listed under [prod_env] file in bash.
I tried with sed, awk and grep with my limited knowledge, but I am not sure how to filter them.
Example: I would like to print hosts under prod_env and dev_env. so the final output would be:
foo.example.com
bar.example.com
foo_dev1.example.com
dev2_bar.example.com
awk sed yaml
add a comment |
I have a text file with the following content in it.
$ cat hosts.yml
[prod_env]
foo.example.com
bar.example.com
[stage_env]
foo_stage.example.com
bar_stage.example.com
[dev_env]
foo_dev1.example.com
dev2_bar.example.com
I would like to filter hosts listed under [prod_env] file in bash.
I tried with sed, awk and grep with my limited knowledge, but I am not sure how to filter them.
Example: I would like to print hosts under prod_env and dev_env. so the final output would be:
foo.example.com
bar.example.com
foo_dev1.example.com
dev2_bar.example.com
awk sed yaml
I have a text file with the following content in it.
$ cat hosts.yml
[prod_env]
foo.example.com
bar.example.com
[stage_env]
foo_stage.example.com
bar_stage.example.com
[dev_env]
foo_dev1.example.com
dev2_bar.example.com
I would like to filter hosts listed under [prod_env] file in bash.
I tried with sed, awk and grep with my limited knowledge, but I am not sure how to filter them.
Example: I would like to print hosts under prod_env and dev_env. so the final output would be:
foo.example.com
bar.example.com
foo_dev1.example.com
dev2_bar.example.com
awk sed yaml
awk sed yaml
edited 5 hours ago
Jeff Schaller♦
46k1165150
46k1165150
asked 8 hours ago
smcsmc
205210
205210
add a comment |
add a comment |
3 Answers
3
active
oldest
votes
An sed
solution:
sed -nEe '/[(prod|dev)_env]/!d;N;:loop' -e 's/.*n//;$p;d;;N;P;/n[/D;bloop' hosts.yml
/[(prod|dev)_env]/!d
drops all lines until[prod_env]
or[dev_env]
ist foundN;:loop
adds the next line and starts a loop- inside the loop we remove the first of the two lines with
s/.*n//
, because it is either the[...env]
line or we already printed it in the last loop cycle $p;d;
prints the remaining lines if we reached the last line while printingN;P
adds the next line and prints the current one/n[/D
looks if the next line starts with a[
. In this case the first line in the buffer (already printed) can be discarded and we start over with that[
linebloop
otherwise loop
Instead of adding the next line to the buffer, printing and removing the old one, you can go line by line, but this would require another loop, because you can't start over with D
Thanks for the awesome explanation, this once again reminds me how powerful sed is.
– smc
6 hours ago
add a comment |
You could do (on a mac):
tr "n" "t" < hosts.yml | sed $'s%t\[%\n[%g' | grep 'prod|dev' | sed $'s%.*]\t%%g' | tr "t" "n"
tr
will get everything on one line- The first
sed
will
break line before each section grep
will cut out the lines
(sections) you want- Second
sed
will remove the [] part. - Last
tr
will break line so you get one hostname per line.
New contributor
add a comment |
awk 'BEGINRS="[";FS="]n"
$1 ~/(prod|dev)_env/ print $2' ex1
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "106"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f520209%2ffilter-yaml-file-content-using-sed-awk%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
An sed
solution:
sed -nEe '/[(prod|dev)_env]/!d;N;:loop' -e 's/.*n//;$p;d;;N;P;/n[/D;bloop' hosts.yml
/[(prod|dev)_env]/!d
drops all lines until[prod_env]
or[dev_env]
ist foundN;:loop
adds the next line and starts a loop- inside the loop we remove the first of the two lines with
s/.*n//
, because it is either the[...env]
line or we already printed it in the last loop cycle $p;d;
prints the remaining lines if we reached the last line while printingN;P
adds the next line and prints the current one/n[/D
looks if the next line starts with a[
. In this case the first line in the buffer (already printed) can be discarded and we start over with that[
linebloop
otherwise loop
Instead of adding the next line to the buffer, printing and removing the old one, you can go line by line, but this would require another loop, because you can't start over with D
Thanks for the awesome explanation, this once again reminds me how powerful sed is.
– smc
6 hours ago
add a comment |
An sed
solution:
sed -nEe '/[(prod|dev)_env]/!d;N;:loop' -e 's/.*n//;$p;d;;N;P;/n[/D;bloop' hosts.yml
/[(prod|dev)_env]/!d
drops all lines until[prod_env]
or[dev_env]
ist foundN;:loop
adds the next line and starts a loop- inside the loop we remove the first of the two lines with
s/.*n//
, because it is either the[...env]
line or we already printed it in the last loop cycle $p;d;
prints the remaining lines if we reached the last line while printingN;P
adds the next line and prints the current one/n[/D
looks if the next line starts with a[
. In this case the first line in the buffer (already printed) can be discarded and we start over with that[
linebloop
otherwise loop
Instead of adding the next line to the buffer, printing and removing the old one, you can go line by line, but this would require another loop, because you can't start over with D
Thanks for the awesome explanation, this once again reminds me how powerful sed is.
– smc
6 hours ago
add a comment |
An sed
solution:
sed -nEe '/[(prod|dev)_env]/!d;N;:loop' -e 's/.*n//;$p;d;;N;P;/n[/D;bloop' hosts.yml
/[(prod|dev)_env]/!d
drops all lines until[prod_env]
or[dev_env]
ist foundN;:loop
adds the next line and starts a loop- inside the loop we remove the first of the two lines with
s/.*n//
, because it is either the[...env]
line or we already printed it in the last loop cycle $p;d;
prints the remaining lines if we reached the last line while printingN;P
adds the next line and prints the current one/n[/D
looks if the next line starts with a[
. In this case the first line in the buffer (already printed) can be discarded and we start over with that[
linebloop
otherwise loop
Instead of adding the next line to the buffer, printing and removing the old one, you can go line by line, but this would require another loop, because you can't start over with D
An sed
solution:
sed -nEe '/[(prod|dev)_env]/!d;N;:loop' -e 's/.*n//;$p;d;;N;P;/n[/D;bloop' hosts.yml
/[(prod|dev)_env]/!d
drops all lines until[prod_env]
or[dev_env]
ist foundN;:loop
adds the next line and starts a loop- inside the loop we remove the first of the two lines with
s/.*n//
, because it is either the[...env]
line or we already printed it in the last loop cycle $p;d;
prints the remaining lines if we reached the last line while printingN;P
adds the next line and prints the current one/n[/D
looks if the next line starts with a[
. In this case the first line in the buffer (already printed) can be discarded and we start over with that[
linebloop
otherwise loop
Instead of adding the next line to the buffer, printing and removing the old one, you can go line by line, but this would require another loop, because you can't start over with D
edited 6 hours ago
answered 6 hours ago
PhilipposPhilippos
6,46811851
6,46811851
Thanks for the awesome explanation, this once again reminds me how powerful sed is.
– smc
6 hours ago
add a comment |
Thanks for the awesome explanation, this once again reminds me how powerful sed is.
– smc
6 hours ago
Thanks for the awesome explanation, this once again reminds me how powerful sed is.
– smc
6 hours ago
Thanks for the awesome explanation, this once again reminds me how powerful sed is.
– smc
6 hours ago
add a comment |
You could do (on a mac):
tr "n" "t" < hosts.yml | sed $'s%t\[%\n[%g' | grep 'prod|dev' | sed $'s%.*]\t%%g' | tr "t" "n"
tr
will get everything on one line- The first
sed
will
break line before each section grep
will cut out the lines
(sections) you want- Second
sed
will remove the [] part. - Last
tr
will break line so you get one hostname per line.
New contributor
add a comment |
You could do (on a mac):
tr "n" "t" < hosts.yml | sed $'s%t\[%\n[%g' | grep 'prod|dev' | sed $'s%.*]\t%%g' | tr "t" "n"
tr
will get everything on one line- The first
sed
will
break line before each section grep
will cut out the lines
(sections) you want- Second
sed
will remove the [] part. - Last
tr
will break line so you get one hostname per line.
New contributor
add a comment |
You could do (on a mac):
tr "n" "t" < hosts.yml | sed $'s%t\[%\n[%g' | grep 'prod|dev' | sed $'s%.*]\t%%g' | tr "t" "n"
tr
will get everything on one line- The first
sed
will
break line before each section grep
will cut out the lines
(sections) you want- Second
sed
will remove the [] part. - Last
tr
will break line so you get one hostname per line.
New contributor
You could do (on a mac):
tr "n" "t" < hosts.yml | sed $'s%t\[%\n[%g' | grep 'prod|dev' | sed $'s%.*]\t%%g' | tr "t" "n"
tr
will get everything on one line- The first
sed
will
break line before each section grep
will cut out the lines
(sections) you want- Second
sed
will remove the [] part. - Last
tr
will break line so you get one hostname per line.
New contributor
New contributor
answered 7 hours ago
Søren FalchSøren Falch
211
211
New contributor
New contributor
add a comment |
add a comment |
awk 'BEGINRS="[";FS="]n"
$1 ~/(prod|dev)_env/ print $2' ex1
add a comment |
awk 'BEGINRS="[";FS="]n"
$1 ~/(prod|dev)_env/ print $2' ex1
add a comment |
awk 'BEGINRS="[";FS="]n"
$1 ~/(prod|dev)_env/ print $2' ex1
awk 'BEGINRS="[";FS="]n"
$1 ~/(prod|dev)_env/ print $2' ex1
answered 6 hours ago
JJoaoJJoao
7,5691930
7,5691930
add a comment |
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f520209%2ffilter-yaml-file-content-using-sed-awk%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown