Have some delimited files with improperly placed newline characters in the middle of fields (not line ends), appearing as ^M in Vim. They originate from freebcp (on Centos 6
sed -e 's/\r//g' input_file
This works for me. The difference of -e instead of -i command.
Also I mentioned that see on different platforms behave differently.
Mine is:sed --version
This is not GNU sed version 4.0
You can use the command line tool dos2unix
dos2unix input
Or use the tr
command:
tr -d '\r' <input >output
Actually, you can do the file-format switching in vim
:
:e ++ff=dos
:w ++ff=unix
:e!
Method B:
:e ++ff=dos
:set ff=unix
:w
If you want to delete the \r\n
sequences in the file, try these commands in vim
:
:e ++ff=unix " <-- make sure open with UNIX format
:%s/\r\n//g " <-- remove all \r\n
:w " <-- save file
Your awk
solution works fine. Another two sed
solutions:
sed '1h;1!H;$!d;${g;s/\r\n//g}' input
sed ':A;/\r$/{N;bA};s/\r\n//g' input
I believe some versions of sed
will not recognize \r
as a character. However, you can use a bash
feature to work around that limitation:
echo $string | sed $'s/\r//'
Here, you let bash
replace '\r' with the actual carriage return character inside the $'...'
construct before passing that to sed
as its command. (Assuming you use bash
; other shells should have a similar construct.)
Another method
awk 1 RS='\r\n' ORS=
\r\n
1
is always true, and in the absence of an action block {print}
is used