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

What is the highest possible temporary AC at level 1, without any help from others?

Second (easy access) account in case my bank screws up

Do simulator games use a realistic trajectory to get into orbit?

How to return a security deposit to a tenant

What is the highest possible permanent AC at character creation?

Generate a Graeco-Latin square

English word for "product of tinkering"

How to signal to my players that the following part is supposed to be played on fast forward?

Why is one of Madera Municipal's runways labelled with only "R" on both sides?

Is using haveibeenpwned to validate password strength rational?

Soft question: Examples where lack of mathematical rigour cause security breaches?

How to handle self harm scars on the arm in work environment?

Share calendar details request from manager's manager

Did Milano or Benatar approve or comment on their namesake MCU ships?

Cycle through MeshStyle directives in ListLinePlot

System.StringException: Unexpected end of expression

How Often Do Health Insurance Providers Drop Coverage?

Winning Strategy for the Magician and his Apprentice

What's up with this leaf?

How to tell your grandparent to not come to fetch you with their car?

What is the actual quality of machine translations?

Overlapping String-Blocks

Where Mongol herds graze

What is wrong with this proof that symmetric matrices commute?



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;








2















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









share|improve this question






























    2















    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









    share|improve this question


























      2












      2








      2








      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









      share|improve this question
















      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






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited May 21 at 18:36









      Jeff Schaller

      46.4k1166150




      46.4k1166150










      asked May 21 at 15:48









      smcsmc

      205210




      205210




















          4 Answers
          4






          active

          oldest

          votes


















          3














          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 found


          • N;: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 printing


          • N;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 [ line


          • bloop 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






          share|improve this answer

























          • Thanks for the awesome explanation, this once again reminds me how powerful sed is.

            – smc
            May 21 at 17:39


















          2














          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"



          1. tr will get everything on one line

          2. The first sed will
            break line before each section


          3. grep will cut out the lines
            (sections) you want

          4. Second sed will remove the [] part.

          5. Last tr will break line so you get one hostname per line.





          share|improve this answer






























            2














            awk 'BEGINRS="[";FS="]n" 
            $1 ~/(prod|dev)_env/ print $2' ex1





            share|improve this answer






























              0














              You can do this using GNU sed as shown:



              $ sed -nEe '
              /[/!H;$!d;
              x;1!s/^[(prod|dev)_env]n//p
              ' hosts.yml





              share|improve this answer























                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
                );



                );













                draft saved

                draft discarded


















                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

























                4 Answers
                4






                active

                oldest

                votes








                4 Answers
                4






                active

                oldest

                votes









                active

                oldest

                votes






                active

                oldest

                votes









                3














                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 found


                • N;: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 printing


                • N;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 [ line


                • bloop 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






                share|improve this answer

























                • Thanks for the awesome explanation, this once again reminds me how powerful sed is.

                  – smc
                  May 21 at 17:39















                3














                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 found


                • N;: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 printing


                • N;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 [ line


                • bloop 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






                share|improve this answer

























                • Thanks for the awesome explanation, this once again reminds me how powerful sed is.

                  – smc
                  May 21 at 17:39













                3












                3








                3







                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 found


                • N;: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 printing


                • N;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 [ line


                • bloop 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






                share|improve this answer















                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 found


                • N;: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 printing


                • N;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 [ line


                • bloop 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







                share|improve this answer














                share|improve this answer



                share|improve this answer








                edited May 21 at 17:28

























                answered May 21 at 17:23









                PhilipposPhilippos

                6,46511951




                6,46511951












                • Thanks for the awesome explanation, this once again reminds me how powerful sed is.

                  – smc
                  May 21 at 17:39

















                • Thanks for the awesome explanation, this once again reminds me how powerful sed is.

                  – smc
                  May 21 at 17:39
















                Thanks for the awesome explanation, this once again reminds me how powerful sed is.

                – smc
                May 21 at 17:39





                Thanks for the awesome explanation, this once again reminds me how powerful sed is.

                – smc
                May 21 at 17:39













                2














                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"



                1. tr will get everything on one line

                2. The first sed will
                  break line before each section


                3. grep will cut out the lines
                  (sections) you want

                4. Second sed will remove the [] part.

                5. Last tr will break line so you get one hostname per line.





                share|improve this answer



























                  2














                  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"



                  1. tr will get everything on one line

                  2. The first sed will
                    break line before each section


                  3. grep will cut out the lines
                    (sections) you want

                  4. Second sed will remove the [] part.

                  5. Last tr will break line so you get one hostname per line.





                  share|improve this answer

























                    2












                    2








                    2







                    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"



                    1. tr will get everything on one line

                    2. The first sed will
                      break line before each section


                    3. grep will cut out the lines
                      (sections) you want

                    4. Second sed will remove the [] part.

                    5. Last tr will break line so you get one hostname per line.





                    share|improve this answer













                    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"



                    1. tr will get everything on one line

                    2. The first sed will
                      break line before each section


                    3. grep will cut out the lines
                      (sections) you want

                    4. Second sed will remove the [] part.

                    5. Last tr will break line so you get one hostname per line.






                    share|improve this answer












                    share|improve this answer



                    share|improve this answer










                    answered May 21 at 17:20









                    Søren FalchSøren Falch

                    212




                    212





















                        2














                        awk 'BEGINRS="[";FS="]n" 
                        $1 ~/(prod|dev)_env/ print $2' ex1





                        share|improve this answer



























                          2














                          awk 'BEGINRS="[";FS="]n" 
                          $1 ~/(prod|dev)_env/ print $2' ex1





                          share|improve this answer

























                            2












                            2








                            2







                            awk 'BEGINRS="[";FS="]n" 
                            $1 ~/(prod|dev)_env/ print $2' ex1





                            share|improve this answer













                            awk 'BEGINRS="[";FS="]n" 
                            $1 ~/(prod|dev)_env/ print $2' ex1






                            share|improve this answer












                            share|improve this answer



                            share|improve this answer










                            answered May 21 at 17:34









                            JJoaoJJoao

                            7,5791930




                            7,5791930





















                                0














                                You can do this using GNU sed as shown:



                                $ sed -nEe '
                                /[/!H;$!d;
                                x;1!s/^[(prod|dev)_env]n//p
                                ' hosts.yml





                                share|improve this answer



























                                  0














                                  You can do this using GNU sed as shown:



                                  $ sed -nEe '
                                  /[/!H;$!d;
                                  x;1!s/^[(prod|dev)_env]n//p
                                  ' hosts.yml





                                  share|improve this answer

























                                    0












                                    0








                                    0







                                    You can do this using GNU sed as shown:



                                    $ sed -nEe '
                                    /[/!H;$!d;
                                    x;1!s/^[(prod|dev)_env]n//p
                                    ' hosts.yml





                                    share|improve this answer













                                    You can do this using GNU sed as shown:



                                    $ sed -nEe '
                                    /[/!H;$!d;
                                    x;1!s/^[(prod|dev)_env]n//p
                                    ' hosts.yml






                                    share|improve this answer












                                    share|improve this answer



                                    share|improve this answer










                                    answered May 22 at 8:14









                                    Rakesh SharmaRakesh Sharma

                                    682




                                    682



























                                        draft saved

                                        draft discarded
















































                                        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.




                                        draft saved


                                        draft discarded














                                        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





















































                                        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







                                        Popular posts from this blog

                                        Wikipedia:Vital articles Мазмуну Biography - Өмүр баян Philosophy and psychology - Философия жана психология Religion - Дин Social sciences - Коомдук илимдер Language and literature - Тил жана адабият Science - Илим Technology - Технология Arts and recreation - Искусство жана эс алуу History and geography - Тарых жана география Навигация менюсу

                                        Bruxelas-Capital Índice Historia | Composición | Situación lingüística | Clima | Cidades irmandadas | Notas | Véxase tamén | Menú de navegacióneO uso das linguas en Bruxelas e a situación do neerlandés"Rexión de Bruxelas Capital"o orixinalSitio da rexiónPáxina de Bruselas no sitio da Oficina de Promoción Turística de Valonia e BruxelasMapa Interactivo da Rexión de Bruxelas-CapitaleeWorldCat332144929079854441105155190212ID28008674080552-90000 0001 0666 3698n94104302ID540940339365017018237

                                        What should I write in an apology letter, since I have decided not to join a company after accepting an offer letterShould I keep looking after accepting a job offer?What should I do when I've been verbally told I would get an offer letter, but still haven't gotten one after 4 weeks?Do I accept an offer from a company that I am not likely to join?New job hasn't confirmed starting date and I want to give current employer as much notice as possibleHow should I address my manager in my resignation letter?HR delayed background verification, now jobless as resignedNo email communication after accepting a formal written offer. How should I phrase the call?What should I do if after receiving a verbal offer letter I am informed that my written job offer is put on hold due to some internal issues?Should I inform the current employer that I am about to resign within 1-2 weeks since I have signed the offer letter and waiting for visa?What company will do, if I send their offer letter to another company