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









up vote
1
down vote

favorite












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

























    up vote
    1
    down vote

    favorite












    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























      up vote
      1
      down vote

      favorite









      up vote
      1
      down vote

      favorite











      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

      420721




      420721






















          3 Answers
          3






          active

          oldest

          votes

















          up vote
          1
          down vote



          accepted










          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



























            up vote
            2
            down vote













            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



























              up vote
              0
              down vote













              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',
                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








                up vote
                1
                down vote



                accepted










                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
























                  up vote
                  1
                  down vote



                  accepted










                  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






















                    up vote
                    1
                    down vote



                    accepted







                    up vote
                    1
                    down vote



                    accepted






                    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,047424




                    3,047424






















                        up vote
                        2
                        down vote













                        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
























                          up vote
                          2
                          down vote













                          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






















                            up vote
                            2
                            down vote










                            up vote
                            2
                            down vote









                            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




















                                up vote
                                0
                                down vote













                                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
























                                  up vote
                                  0
                                  down vote













                                  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






















                                    up vote
                                    0
                                    down vote










                                    up vote
                                    0
                                    down vote









                                    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

                                        Kleinkühnau

                                        Makov (Slowakei)

                                        Deutsches Schauspielhaus