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

      379720




      379720
























          3 Answers
          3






          active

          oldest

          votes

















          up vote
          1
          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




























              up vote
              0
              down vote













              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





















                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













                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
                  1
                  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
                    1
                    down vote










                    up vote
                    1
                    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.1k2930




                    10.1k2930
























                        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






















                                up vote
                                0
                                down vote













                                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
                                  0
                                  down vote













                                  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
                                    0
                                    down vote










                                    up vote
                                    0
                                    down vote









                                    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

                                    2,112418




                                    2,112418






























                                         

                                        draft saved


                                        draft discarded



















































                                         


                                        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

                                        Xamarin.iOS Cant Deploy on Iphone

                                        Glorious Revolution

                                        Dulmage-Mendelsohn matrix decomposition in Python