简短形式:你可以这样做,但你需要知道你需要提前做;这不是事后可以交互实施的东西。
编写脚本以确定字符串是什么。我们需要一个更详细的输出格式示例来提供更好的用法示例,但这里有一个用于整个第一行是过滤器目标的简单情况:
run_my_command | { read string_to_filter_for; fgrep -e "$string_to_filter_for" }
read string_to_filter_for
用尽可能多的命令替换以读取足够多的输入以确定目标字符串是什么;如有必要,这可能是一个循环。
例如,假设输出包含以下内容:
Session id: foobar
之后,您想要 grep 查找包含foobar
.
...然后您可以通过以下脚本进行管道传输:
re='Session id: (.*)'
while read; do
if [[ $REPLY =~ $re ]] ; then
target=${BASH_REMATCH[1]}
break
else
# if you want to print the preamble; leave this out otherwise
printf '%s\n' "$REPLY"
fi
done
[[ $target ]] && grep -F -e "$target"
如果要手动指定过滤器目标,可以通过循环检查使用过滤器内容创建的文件,然后在启动 grep 时使用它来完成。