最近のbash (3.0)は、他のプログラミング言語並みに正規表現が使えることが分かりました。また、ファイルから一行ずつ読み込んで処理する記述がwhile制御構文で書けることも今回知ることができました。
while read line; do [[ "$line" =~ "^error in (.*):[0-9]* .*$" ]] && echo "file ${BASH_REMATCH[1]}" done < input.txt
正規表現では、グループ化の括弧はエスケープ不要です。
この正規表現の形式はバージョン3から導入された新しい機能で、あまり知られていないようです。