Использование sed:
< inputfile sed 's/(\([^\)]*\(bar\|blat\)[^\)]*\))/\1/g; s/(.*) //g'
Входной файл:
test (bar) (blat)
bar (testblat) (bartest)
blat (testbar) (barblat) (no) (blatanother)
Выходной файл:
test bar blat
bar testblat bartest
blat testbar barblat blatanother
Разбивка:
# 1:
(: соответствует символу ( \(: начинает группировать группу захвата [^\)]*: соответствует 0 или более символам, а не ) \(: начинается группировка допустимых строк bar: соответствует 1-й разрешенной строке \|: отделяет 2-ю разрешенную строку blat: соответствует второй разрешенной строке \): прекращает группировку допустимых строк [^\)]*: соответствует 0 или более символам, не ) \): останавливает группировку группы захвата ): соответствует символу )# 2:
(: соответствует значению ( character .*: соответствует 0 или более символам \(: начинает группировать группу захвата : соответствует символу