Есть ли конкретная причина, по которой вы спрашиваете регулярное выражение? Возможно, они не лучший инструмент для этой задачи.
замена типа
s/[ \t]+/ /g
должен сжимать внутренние пробелы (на самом деле, он также сжимает начальные и конечные пробелы, но это не похоже на проблему.), И
s/[ \t]+$/$/
позаботится о конце пробела. [Я использую синтаксис sed
ish здесь. Вы не сказали, какой вкус вы предпочитаете.]
Сразу же я не вижу способа сделать это в одном выражении.