Is there a Bash command to convert \r\n to \n?
There is:
dos2unix
There is a Unix utility called conv
that can convert line endings. It is often invoked with softlinks to u2d
or d2u
or unix2dos
or dos2unix
.
Additionally there are utilities called fromdos
and todos
.
Translate (tr) is available in all Unixes:
tr -d '\r' # From \r\n line end (DOS/Windows), the \r will be removed so \n line end (Unix) remains.
With sed and find that end with .txt, .php, .js, .css
:
sed -rie 's/\r\n/\n/' \
$(find . -type f -iregex ".*\.\(txt\|php\|js\|css\)")
Doing this with POSIX is tricky:
POSIX Sed does not support
\r
or\15
. Even if it did, the in place option-i
is not POSIXPOSIX Awk does support
\r
and\15
, however the-i inplace
option is not POSIXd2u and dos2unix are not POSIX utilities, but ex is
POSIX ex does not support
\r
,\15
,\n
or\12
To remove carriage returns:
awk 'BEGIN{RS="\1";ORS="";getline;gsub("\r","");print>ARGV[1]}' file
To add carriage returns:
awk 'BEGIN{RS="\1";ORS="";getline;gsub("\n","\r&");print>ARGV[1]}' file