Bash: pass multiline output of grep to another command that loops










1














I have the following command to grep the kafka topics



kafka-topics --list --zookeeper localhost:2181 | grep repartition


This give me a shell output with multiple topics



dev-ALPHA_CLUSTER-investment.ed.store.alpha_cluster-repartition
dev-CUSTOM_GROUP-KSTREAM-REDUCE-STATE-STORE-0000000003-repartition
dev-CUSTOM_GROUP-investment.ed.store.custom_group-repartition


I need to provide these topics one by one to another command



kafka-topics --zookeeper localhost:2181 --alter --config cleanup.policy=compact --topic TOPIC_NAME


where TOPIC_NAME is the topic(s) from the previous grep command. I was wondering if there is a way to combine them such that if the grep has some results (topics separated by newline) then the other command is executed in a loop with TOPIC_NAME being each topic returned by grep










share|improve this question


























    1














    I have the following command to grep the kafka topics



    kafka-topics --list --zookeeper localhost:2181 | grep repartition


    This give me a shell output with multiple topics



    dev-ALPHA_CLUSTER-investment.ed.store.alpha_cluster-repartition
    dev-CUSTOM_GROUP-KSTREAM-REDUCE-STATE-STORE-0000000003-repartition
    dev-CUSTOM_GROUP-investment.ed.store.custom_group-repartition


    I need to provide these topics one by one to another command



    kafka-topics --zookeeper localhost:2181 --alter --config cleanup.policy=compact --topic TOPIC_NAME


    where TOPIC_NAME is the topic(s) from the previous grep command. I was wondering if there is a way to combine them such that if the grep has some results (topics separated by newline) then the other command is executed in a loop with TOPIC_NAME being each topic returned by grep










    share|improve this question
























      1












      1








      1







      I have the following command to grep the kafka topics



      kafka-topics --list --zookeeper localhost:2181 | grep repartition


      This give me a shell output with multiple topics



      dev-ALPHA_CLUSTER-investment.ed.store.alpha_cluster-repartition
      dev-CUSTOM_GROUP-KSTREAM-REDUCE-STATE-STORE-0000000003-repartition
      dev-CUSTOM_GROUP-investment.ed.store.custom_group-repartition


      I need to provide these topics one by one to another command



      kafka-topics --zookeeper localhost:2181 --alter --config cleanup.policy=compact --topic TOPIC_NAME


      where TOPIC_NAME is the topic(s) from the previous grep command. I was wondering if there is a way to combine them such that if the grep has some results (topics separated by newline) then the other command is executed in a loop with TOPIC_NAME being each topic returned by grep










      share|improve this question













      I have the following command to grep the kafka topics



      kafka-topics --list --zookeeper localhost:2181 | grep repartition


      This give me a shell output with multiple topics



      dev-ALPHA_CLUSTER-investment.ed.store.alpha_cluster-repartition
      dev-CUSTOM_GROUP-KSTREAM-REDUCE-STATE-STORE-0000000003-repartition
      dev-CUSTOM_GROUP-investment.ed.store.custom_group-repartition


      I need to provide these topics one by one to another command



      kafka-topics --zookeeper localhost:2181 --alter --config cleanup.policy=compact --topic TOPIC_NAME


      where TOPIC_NAME is the topic(s) from the previous grep command. I was wondering if there is a way to combine them such that if the grep has some results (topics separated by newline) then the other command is executed in a loop with TOPIC_NAME being each topic returned by grep







      bash shell awk sed grep






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 10 at 22:51









      Fizi

      425721




      425721






















          3 Answers
          3






          active

          oldest

          votes


















          1














          Use xargs



          kafka-topics --list --zookeeper localhost:2181 | grep repartition | xargs -i kafka-topics --zookeeper localhost:2181 --alter --config cleanup.policy=compact --topic 





          share|improve this answer




























            2














            You can use xargs -n1 for executing the one parameter at a time:



            zookeeper="--zookeeper localhost:2181"
            kafka-topics --list $zookeeper | grep repartition |
            xargs -n1 kafka-topics $zookeeper --alter --config cleanup.policy=compact --topic





            share|improve this answer




























              0














              kafka-topics --list --zookeeper localhost:2181 | grep repartition | sed 's/^/kafka-topics --zookeeper localhost:2181 --alter --config cleanup.policy=compact --topic /g'


              The sed-part of the command is prepending kafka-topics --zookeeper localhost:2181 --alter --config cleanup.policy=compact --topic (including the space at the end) to output of kafka-topics --list --zookeeper localhost:2181. You can either redirect those commands to a file or redirect them to bash to run them directly.






              share|improve this answer




















                Your Answer






                StackExchange.ifUsing("editor", function ()
                StackExchange.using("externalEditor", function ()
                StackExchange.using("snippets", function ()
                StackExchange.snippets.init();
                );
                );
                , "code-snippets");

                StackExchange.ready(function()
                var channelOptions =
                tags: "".split(" "),
                id: "1"
                ;
                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: true,
                noModals: true,
                showLowRepImageUploadWarning: true,
                reputationToPostImages: 10,
                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%2fstackoverflow.com%2fquestions%2f53244208%2fbash-pass-multiline-output-of-grep-to-another-command-that-loops%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









                1














                Use xargs



                kafka-topics --list --zookeeper localhost:2181 | grep repartition | xargs -i kafka-topics --zookeeper localhost:2181 --alter --config cleanup.policy=compact --topic 





                share|improve this answer

























                  1














                  Use xargs



                  kafka-topics --list --zookeeper localhost:2181 | grep repartition | xargs -i kafka-topics --zookeeper localhost:2181 --alter --config cleanup.policy=compact --topic 





                  share|improve this answer























                    1












                    1








                    1






                    Use xargs



                    kafka-topics --list --zookeeper localhost:2181 | grep repartition | xargs -i kafka-topics --zookeeper localhost:2181 --alter --config cleanup.policy=compact --topic 





                    share|improve this answer












                    Use xargs



                    kafka-topics --list --zookeeper localhost:2181 | grep repartition | xargs -i kafka-topics --zookeeper localhost:2181 --alter --config cleanup.policy=compact --topic 






                    share|improve this answer












                    share|improve this answer



                    share|improve this answer










                    answered Nov 11 at 3:43









                    ssemilla

                    3,077424




                    3,077424























                        2














                        You can use xargs -n1 for executing the one parameter at a time:



                        zookeeper="--zookeeper localhost:2181"
                        kafka-topics --list $zookeeper | grep repartition |
                        xargs -n1 kafka-topics $zookeeper --alter --config cleanup.policy=compact --topic





                        share|improve this answer

























                          2














                          You can use xargs -n1 for executing the one parameter at a time:



                          zookeeper="--zookeeper localhost:2181"
                          kafka-topics --list $zookeeper | grep repartition |
                          xargs -n1 kafka-topics $zookeeper --alter --config cleanup.policy=compact --topic





                          share|improve this answer























                            2












                            2








                            2






                            You can use xargs -n1 for executing the one parameter at a time:



                            zookeeper="--zookeeper localhost:2181"
                            kafka-topics --list $zookeeper | grep repartition |
                            xargs -n1 kafka-topics $zookeeper --alter --config cleanup.policy=compact --topic





                            share|improve this answer












                            You can use xargs -n1 for executing the one parameter at a time:



                            zookeeper="--zookeeper localhost:2181"
                            kafka-topics --list $zookeeper | grep repartition |
                            xargs -n1 kafka-topics $zookeeper --alter --config cleanup.policy=compact --topic






                            share|improve this answer












                            share|improve this answer



                            share|improve this answer










                            answered Nov 10 at 23:27









                            Walter A

                            10.3k2930




                            10.3k2930





















                                0














                                kafka-topics --list --zookeeper localhost:2181 | grep repartition | sed 's/^/kafka-topics --zookeeper localhost:2181 --alter --config cleanup.policy=compact --topic /g'


                                The sed-part of the command is prepending kafka-topics --zookeeper localhost:2181 --alter --config cleanup.policy=compact --topic (including the space at the end) to output of kafka-topics --list --zookeeper localhost:2181. You can either redirect those commands to a file or redirect them to bash to run them directly.






                                share|improve this answer

























                                  0














                                  kafka-topics --list --zookeeper localhost:2181 | grep repartition | sed 's/^/kafka-topics --zookeeper localhost:2181 --alter --config cleanup.policy=compact --topic /g'


                                  The sed-part of the command is prepending kafka-topics --zookeeper localhost:2181 --alter --config cleanup.policy=compact --topic (including the space at the end) to output of kafka-topics --list --zookeeper localhost:2181. You can either redirect those commands to a file or redirect them to bash to run them directly.






                                  share|improve this answer























                                    0












                                    0








                                    0






                                    kafka-topics --list --zookeeper localhost:2181 | grep repartition | sed 's/^/kafka-topics --zookeeper localhost:2181 --alter --config cleanup.policy=compact --topic /g'


                                    The sed-part of the command is prepending kafka-topics --zookeeper localhost:2181 --alter --config cleanup.policy=compact --topic (including the space at the end) to output of kafka-topics --list --zookeeper localhost:2181. You can either redirect those commands to a file or redirect them to bash to run them directly.






                                    share|improve this answer












                                    kafka-topics --list --zookeeper localhost:2181 | grep repartition | sed 's/^/kafka-topics --zookeeper localhost:2181 --alter --config cleanup.policy=compact --topic /g'


                                    The sed-part of the command is prepending kafka-topics --zookeeper localhost:2181 --alter --config cleanup.policy=compact --topic (including the space at the end) to output of kafka-topics --list --zookeeper localhost:2181. You can either redirect those commands to a file or redirect them to bash to run them directly.







                                    share|improve this answer












                                    share|improve this answer



                                    share|improve this answer










                                    answered Nov 10 at 23:01









                                    Martin Urbanec

                                    2818




                                    2818



























                                        draft saved

                                        draft discarded
















































                                        Thanks for contributing an answer to Stack Overflow!


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





                                        Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                                        Please pay close attention to the following guidance:


                                        • 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%2fstackoverflow.com%2fquestions%2f53244208%2fbash-pass-multiline-output-of-grep-to-another-command-that-loops%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

                                        Top Tejano songwriter Luis Silva dead of heart attack at 64

                                        ReactJS Fetched API data displays live - need Data displayed static

                                        Evgeni Malkin