我寫了下面的過濾器的功能在命令我在〜/ .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