We have 10 PC with some version of Ubuntu and only remote access. While doing some upgrades to custom software I did not notice that the line endings in some scripts were Windows version (CR+LF) and not the Unix version (LF). So now when I want to launch the script it gives an error:

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

Is there a way to change all line endings in a script from terminal. The thing is that I can not install any new software to this group of PC-s.

marked as duplicate by terdon command-line Jul 26 '16 at 15:06

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

  • 1
    Use the sed command from the duplicate's accepted answer. – terdon Jul 26 '16 at 15:07
up vote 22 down vote accepted

Option 1: dos2unix

You can use the program dos2unix, which is specifically designed for this:

dos2unix file.txt

will replace all CR from all lines, in place operation.

To save the output in a different file:

dos2unix -n file.txt output.txt

You might need to install it first by:

sudo apt-get install dos2unix

Option 2: sed

Or you can use sed to replace all CR (\r) from line endings:

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

With option -i, the file will be edited in-place, and the original file will be backed up as file.txt.bak.

  • 3
    I did use the sed command and it worked. Thank you! – NonStandardModel Jul 26 '16 at 15:14

Not the answer you're looking for? Browse other questions tagged or ask your own question.