我写了下面的过滤器的功能在命令我在〜/ .bash_profile:加快bash的过滤功能,以连续运行,而不是每行
hilite() {
export REGEX_SED=$(echo $1 | sed "s/[|()]/\\\&/g")
while read line
do
echo $line | egrep "$1" | sed "s/$REGEX_SED/\x1b[7m&\x1b[0m/g"
done
exit 0
}
找到管道输送到它匹配正的东西线表达式,并在VT100兼容终端上使用ANSI转义码突出显示匹配项。
例如,以下的发现,并突出琴弦仓,ü或这是在最后10行的整个单词/ etc/passwd中:
tail /etc/passwd | hilite "\b(bin|[U1])\b"
然而,脚本运行速度非常缓慢,因为每行都会分叉echo,egrep和sed。
在这种情况下,这将是更有效地做的egrep对整个输入,然后在其输出端运行的sed。
如何修改我的函数来做到这一点?如果可能,我宁愿不创建任何临时文件。
P.S.是否有另一种方式来以类似的方式查找和突出显示线条?
'退出0'可能不是你想要的。如果你不小心输入了尾部文件; hilite foo',你的shell将终止!使用':','真','返回0',或者只是删除'出口0'线完全。 –
@WilliamPursell:你说得对,谢谢!猜测http://stackoverflow.com/questions/5104426/while-loop-in-bash-script也应该修正... – Gnubie