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

时间:2018-11-10 22:51:55

标签: bash shell awk sed grep

我有以下命令grep kafka主题

$wgHooks['UserLoginComplete'][] = 'onUserLoginComplete';

function onUserLoginComplete(User &$user, &$inject_html, $direct){
      $_SESSION['mydata']  = 'some data';
}

这给了我一个包含多个主题的shell输出

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 是上一个grep命令的主题。我想知道是否有一种方法可以合并它们,以便如果grep产生了一些结果(主题用换行符分隔),则另一个命令将循环执行,TOPIC_NAME是grep返回的每个主题

3 个答案:

答案 0 :(得分:2)

您可以使用xargs -n1一次执行一个参数:

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

答案 1 :(得分:1)

使用xargs

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

答案 2 :(得分:0)

dispatchTouchEvent(ev: MotionEvent)

命令的sed部分在/** * On each touch event: * Check is [snackbar] present and displayed * and dismiss it if user touched anywhere outside it's bounds */ override fun dispatchTouchEvent(ev: MotionEvent): Boolean { // dismiss shown snackbar if user tapped anywhere outside snackbar snackbar?.takeIf { it.isShown }?.run { val touchPoint = Point(Math.round(ev.rawX), Math.round(ev.rawY)) if (!isPointInsideViewBounds(view, touchPoint)) { dismiss() snackbar = null // set snackbar to null to prevent this block being executed twice } } // call super return super.dispatchTouchEvent(ev) } 的输出之前加上kafka-topics --list --zookeeper localhost:2181 | grep repartition | sed 's/^/kafka-topics --zookeeper localhost:2181 --alter --config cleanup.policy=compact --topic /g' (包括末尾的空格)。您可以将这些命令重定向到文件,也可以将它们重定向到kafka-topics --zookeeper localhost:2181 --alter --config cleanup.policy=compact --topic以直接运行它们。