Answers:
如果浏览less
手册页,您会发现less
它具有INPUT PREPROCESSOR功能。
echo $LESSOPEN
查看此预处理器的位置,并使用less
/ vim
/ cat
查看其内容。
在我的机器上,此预处理器/usr/bin/lesspipe.sh
为rpm,其中包括以下内容:
*.rpm) rpm -qpivl --changelog -- "$1"; handle_exit_status $?
实际上,less
无需手动将文件打开为rpm
,并向您显示其输出的分页。
显然,要通过此信息进行grep,只需直接对rpm的输出进行grep即可:
grep "foo" < <(rpm -qpivl --changelog -- bar.rpm)
或一般而言(感谢OrangeDog)
grep "foo" < <(lesspipe.sh bar.rpm)
注意: $LESSOPEN
不能简单地保留-的位置lesspipe.sh
-它以a开头,以a |
结尾,%s
因此直接调用它会导致错误。
grep "foo" < <($LESSOPEN bar.rpm)
呢?甚至只是$LESSOPEN bar.rpm | grep "foo"
。