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

                                        Club Baloncesto Breogán Índice Historia | Pavillón | Nome | O Breogán na cultura popular | Xogadores | Adestradores | Presidentes | Palmarés | Historial | Líderes | Notas | Véxase tamén | Menú de navegacióncbbreogan.galCadroGuía oficial da ACB 2009-10, páxina 201Guía oficial ACB 1992, páxina 183. Editorial DB.É de 6.500 espectadores sentados axeitándose á última normativa"Estudiantes Junior, entre as mellores canteiras"o orixinalHemeroteca El Mundo Deportivo, 16 setembro de 1970, páxina 12Historia do BreogánAlfredo Pérez, o último canoneiroHistoria C.B. BreogánHemeroteca de El Mundo DeportivoJimmy Wright, norteamericano do Breogán deixará Lugo por ameazas de morteResultados de Breogán en 1986-87Resultados de Breogán en 1990-91Ficha de Velimir Perasović en acb.comResultados de Breogán en 1994-95Breogán arrasa al Barça. "El Mundo Deportivo", 27 de setembro de 1999, páxina 58CB Breogán - FC BarcelonaA FEB invita a participar nunha nova Liga EuropeaCharlie Bell na prensa estatalMáximos anotadores 2005Tempada 2005-06 : Tódolos Xogadores da Xornada""Non quero pensar nunha man negra, mais pregúntome que está a pasar""o orixinalRaúl López, orgulloso dos xogadores, presume da boa saúde económica do BreogánJulio González confirma que cesa como presidente del BreogánHomenaxe a Lisardo GómezA tempada do rexurdimento celesteEntrevista a Lisardo GómezEl COB dinamita el Pazo para forzar el quinto (69-73)Cafés Candelas, patrocinador del CB Breogán"Suso Lázare, novo presidente do Breogán"o orixinalCafés Candelas Breogán firma el mayor triunfo de la historiaEl Breogán realizará 17 homenajes por su cincuenta aniversario"O Breogán honra ao seu fundador e primeiro presidente"o orixinalMiguel Giao recibiu a homenaxe do PazoHomenaxe aos primeiros gladiadores celestesO home que nos amosa como ver o Breo co corazónTita Franco será homenaxeada polos #50anosdeBreoJulio Vila recibirá unha homenaxe in memoriam polos #50anosdeBreo"O Breogán homenaxeará aos seus aboados máis veteráns"Pechada ovación a «Capi» Sanmartín e Ricardo «Corazón de González»Homenaxe por décadas de informaciónPaco García volve ao Pazo con motivo do 50 aniversario"Resultados y clasificaciones""O Cafés Candelas Breogán, campión da Copa Princesa""O Cafés Candelas Breogán, equipo ACB"C.B. Breogán"Proxecto social"o orixinal"Centros asociados"o orixinalFicha en imdb.comMario Camus trata la recuperación del amor en 'La vieja música', su última película"Páxina web oficial""Club Baloncesto Breogán""C. B. Breogán S.A.D."eehttp://www.fegaba.com

                                        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