~/.bash_profile に次のフィルターを関数として記述しました。
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 エスケープ コードを使用して一致を強調表示します。
たとえば、次の例では、/etc/passwd の最後の 10 行の単語全体である文字列bin、Uまたは1を検索して強調表示します。
tail /etc/passwd | hilite "\b(bin|[U1])\b"
ただし、各行が echo、egrep、および sed をフォークするため、スクリプトの実行は非常に遅くなります。
この場合、入力全体に対して egrep を実行し、その出力に対して sed を実行する方が効率的です。
これを行うために関数を変更するにはどうすればよいですか? 可能であれば、一時ファイルを作成しないことをお勧めします。
PS 同様の方法で行を見つけて強調表示する別の方法はありますか?