如何用多行Shell变量匹配可执行文件输出中的对应行?
解决方法
你可以用以下两种方式实现需求:
方法一:使用grep的-f选项(推荐)
grep -f 参数支持从输入内容中读取每行作为独立的匹配规则,完美适配你的多行变量场景:
run | grep -f <(echo "$VAR")
这里的 <(echo "$VAR") 是Shell的进程替换语法,会把变量内容转为临时的输入源,让grep用每行的关键词去匹配run输出里的对应行。
方法二:将多行变量转为正则OR模式
把变量中的换行替换成正则的或符号|,再用扩展正则匹配:
run | grep -E "$(echo "$VAR" | tr '\n' '|' | sed 's/|$//')"
tr '\n' '|':把变量内的换行符替换为竖线(正则中表示"或")sed 's/|$//':移除最后多余的竖线,避免正则语法错误
为什么之前的尝试失败?
直接执行 run | grep "$VAR" 时,grep会把多行的$VAR视为一个包含换行的完整匹配模式,它只会寻找同时包含aaa、bbb、ggg且顺序与换行一致的行,这和你的需求完全不符。
内容的提问来源于stack exchange,提问作者papabread
相关产品推荐
相关产品推荐

