Как изменить окончание строки Windows на версию Unix

У нас есть 10 ПК с некоторой версией Ubuntu и только удаленный доступ. Выполняя некоторые обновления пользовательского программного обеспечения, я не заметил, что окончания строк в некоторых сценариях были версией Windows (CR + LF), а не версией Unix (LF). Итак, теперь, когда я хочу запустить скрипт, он выдает ошибку:

bash: /usr/local/bin/portsee: /usr/bin/python^M: bad interpreter: No such file or directory

Есть ли способ изменить все окончания строк в скрипте из терминала? Дело в том, что я не могу установить какое-либо новое программное обеспечение на эту группу ПК.

Вариант 1: dos2unix

Вы можете использовать программу dos2unix, который специально разработан для этого:

dos2unix file.txt

заменит все CR из всех линий, на месте операции.

Чтобы сохранить выходные данные в другом файле:

dos2unix -n file.txt output.txt

Возможно, вам придется сначала установить его с помощью:

sudo apt-get install dos2unix

Вариант 2: sed

Или вы можете использовать sed для замены всех CR (\r) из окончаний строк:

sed -i.bak 's/\r$//' file.txt

С возможностью -i, файл будет отредактирован на месте, а исходная копия файла будет сохранена как file.txt.bak.

То sed решение не является переносимым на все платформы. Это не сработало для меня на macOS, если я этого не сделал brew install gsed и использовала gsed 's/\r$//'.

Для решения, которое работает в большинстве мест без установки чего-либо, я использую

tr -d '\r'

Чтобы отредактировать файл на месте, я создаю новые данные в подоболочке перед удалением и перезаписью исходного файла:

echo "$(tr -d '\r' < file)" > file

Используйте команду sed из принятого ответа дубликата.