Это немного короче, всего 41 символ.
,[[->+>+<<]>-------------[>.<[-]]>[-]<<,]
Считывает значение в [0]. Он копирует прочитанное значение в [1] и a [2] и вычитает 13 из [1]. Если a [1] не равен нулю (то есть это не CR), он помещает [2] и очищает [1]. Затем он очищает [2], снова считывает [0] и повторяет.
Это имеет дополнительное преимущество: поскольку он оставляет [0] = 0 при каждом чтении, он должен поддерживать виртуальные машины BF, которые читают EOF как 0, или рассматривать EOF как «без изменений», обе из которых являются общий.
Поскольку это не заменяет пары CRLF на LF, а просто удаляет CR, это не зависит от предположения, что файл заканчивается LF. Мое собственное тестирование с dos2unix (по крайней мере, Cygwin) не показывает, что одинокие CR сохраняются.