代码之家  ›  专栏  ›  技术社区  ›  Fizi

Bash:将grep的多行输出传递给另一个循环的命令

  •  1
  • Fizi  · 技术社区  · 6 年前

    我有以下命令来grep卡夫卡主题

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

    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
    

    我需要将这些主题一个接一个地提供给另一个命令

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

    哪里 TOPIC_NAME 是上一个grep命令中的主题。我想知道是否有一种方法可以将它们组合在一起,这样如果grep有一些结果(主题由换行符分隔),那么另一个命令将在一个循环中执行 主题名称

    3 回复  |  直到 6 年前
        1
  •  1
  •   ssemilla    6 年前

    xargs

    kafka-topics --list --zookeeper localhost:2181 | grep repartition | xargs -i kafka-topics --zookeeper localhost:2181 --alter --config cleanup.policy=compact --topic {}
    
        2
  •  2
  •   Walter A    6 年前

    你可以用 xargs -n1 用于一次执行一个参数:

    zookeeper="--zookeeper localhost:2181"
    kafka-topics --list ${zookeeper} | grep repartition |
       xargs -n1 kafka-topics ${zookeeper} --alter --config cleanup.policy=compact --topic 
    
        3
  •  0
  •   Martin Urbanec    6 年前
    kafka-topics --list --zookeeper localhost:2181 | grep repartition | sed 's/^/kafka-topics --zookeeper localhost:2181 --alter --config cleanup.policy=compact --topic /g'
    

    命令的sed部分正在预结束 kafka-topics --zookeeper localhost:2181 --alter --config cleanup.policy=compact --topic (包括末尾的空格)以输出 kafka-topics --list --zookeeper localhost:2181 bash 直接运行它们。