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

Multi tool use
Multi tool use

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







                                        6,f3WbJ9 CNqR3cByOHu8Gbn7HYGkS mAxeiJ,t2a,Y,a 2blXT8BcgMkKvwLzLM,LtfbQrHubZhQugEPT6n,Nn
                                        fbu,lnuhhJK,JcT4G,GiG9 xZ9JRNX Xr yro,NArP7 7VQfRtSpda5ejVd,R1j2BlYONkbe

                                        Popular posts from this blog

                                        RemoteApp sporadic failureWindows 2008 RemoteAPP client disconnects within a matter of minutesWhat is the minimum version of RDP supported by Server 2012 RDS?How to configure a Remoteapp server to increase stabilityMicrosoft RemoteApp Active SessionRDWeb TS connection broken for some users post RemoteApp certificate changeRemote Desktop Licensing, RemoteAPPRDS 2012 R2 some users are not able to logon after changed date and time on Connection BrokersWhat happens during Remote Desktop logon, and is there any logging?After installing RDS on WinServer 2016 I still can only connect with two users?RD Connection via RDGW to Session host is not connecting

                                        Vilaño, A Laracha Índice Patrimonio | Lugares e parroquias | Véxase tamén | Menú de navegación43°14′52″N 8°36′03″O / 43.24775, -8.60070

                                        Cegueira Índice Epidemioloxía | Deficiencia visual | Tipos de cegueira | Principais causas de cegueira | Tratamento | Técnicas de adaptación e axudas | Vida dos cegos | Primeiros auxilios | Crenzas respecto das persoas cegas | Crenzas das persoas cegas | O neno deficiente visual | Aspectos psicolóxicos da cegueira | Notas | Véxase tamén | Menú de navegación54.054.154.436928256blindnessDicionario da Real Academia GalegaPortal das Palabras"International Standards: Visual Standards — Aspects and Ranges of Vision Loss with Emphasis on Population Surveys.""Visual impairment and blindness""Presentan un plan para previr a cegueira"o orixinalACCDV Associació Catalana de Cecs i Disminuïts Visuals - PMFTrachoma"Effect of gene therapy on visual function in Leber's congenital amaurosis"1844137110.1056/NEJMoa0802268Cans guía - os mellores amigos dos cegosArquivadoEscola de cans guía para cegos en Mortágua, PortugalArquivado"Tecnología para ciegos y deficientes visuales. Recopilación de recursos gratuitos en la Red""Colorino""‘COL.diesis’, escuchar los sonidos del color""COL.diesis: Transforming Colour into Melody and Implementing the Result in a Colour Sensor Device"o orixinal"Sistema de desarrollo de sinestesia color-sonido para invidentes utilizando un protocolo de audio""Enseñanza táctil - geometría y color. Juegos didácticos para niños ciegos y videntes""Sistema Constanz"L'ocupació laboral dels cecs a l'Estat espanyol està pràcticament equiparada a la de les persones amb visió, entrevista amb Pedro ZuritaONCE (Organización Nacional de Cegos de España)Prevención da cegueiraDescrición de deficiencias visuais (Disc@pnet)Braillín, un boneco atractivo para calquera neno, con ou sen discapacidade, que permite familiarizarse co sistema de escritura e lectura brailleAxudas Técnicas36838ID00897494007150-90057129528256DOID:1432HP:0000618D001766C10.597.751.941.162C97109C0155020