Delete carriage returns & newlines with sed
# delete newlines printf "a\nb\nc\nd\ne\nf" | sed -n -e 'l' printf "a\nb\nc\nd\ne\nf" | sed -E -e :a -e '$!N; s/\n//g; ta' printf "a\n\nb" | sed -n -e 'l' printf "a\n\nb" | sed -E -e :a -e '$!N; s/\n//g; ta' | sed -n -e 'l' printf "a\n\nb" | sed -E -e :a -e '$!N; s/\n$//g; ta' | sed -n -e 'l' printf "a\n\n\n\n\n\nb" | sed -E -e :a -e '$!N; s/\n$//g; ta' | sed -n -e 'l' # delete carriage returns printf "he\r\rllo\n" | sed -n -e 'l' printf "he\r\rllo\n" | sed -e s/$'\r'//g | sed -n -e 'l' printf "he\r\rllo\n" | sed -e s/$'\r\r'/$'\r'/g | sed -n -e 'l' CR=$'\r' printf "hello\r\r\n" | sed "s/$CR$CR$/$CR/g" | sed -n -e 'l' # alternatives printf "a\nb\nc\nd\ne\nf" | tr -d '\n' # cf. http://linux.dsplabs.com.au/rmnl-remove-new-line-characters-tr-awk-perl-sed-c-cpp-bash-python-xargs-ghc-ghci-haskell-sam-ssam-p65/ while read -d $'\n'; do echo -n "${REPLY} "; done < <((printf "a\nb\nc\nd\ne\nf")) while read -d $'\n'; do printf "%s " "${REPLY}"; done < <((printf "a\nb\nc\nd\ne\nf")) xargs echo < <((printf "a\nb\nc\nd\ne\nf")) xargs printf "%s " < <((printf "a\nb\nc\nd\ne\nf")) printf "a\nb\nc\nd\ne\nf" | /usr/bin/paste -s -d ' ' - # cf. man paste # delete newlines in-place (also see below) vim -e -s +':%j' +'w!' +'qa!' /path/to/file # insert newlines again printf "%s\n" "hello" | sed -e s/l/$'\\\n'/g | sed -n -e 'l' printf "%s\n" "hello" | sed -E s/\(l\)/\\1$'\\\n'/g | sed -n -e 'l' #----------------------------------------------------------- # converting between \n and \n\r # cf. also flip, http://ccrma.stanford.edu/~craig/utility/flip/ and # http://codesnippets.joyent.com/posts/show/1660 # convert \n into \r\n printf "a\nb\nc\nd\ne\nf\n" printf "a\nb\nc\nd\ne\nf\n" | sed -n -e 'l' printf "a\nb\nc\nd\ne\nf\n" | sed s/$/$'\r'/ printf "a\nb\nc\nd\ne\nf\n" | sed s/$/$'\r'/ | sed -n -e 'l' printf "a\nb\n\n\n\n\n\n\n\n\n\n\nc\nd\ne\nf\n" | sed -E -e :a -e '$!N; s/\n$//g; ta' | sed -E s/$/$'\r'/ | sed -n -e 'l' while read -d $'\n'; do printf "%s\r\n" "${REPLY}"; done < <((printf "a\nb\nc\nd\ne\nf\n")) while read -d $'\n'; do printf "%s\r\n" "${REPLY}"; done < <((printf "a\nb\nc\nd\ne\nf\n")) | sed -n -e 'l' # convert \r\n into \n printf "a\r\nb\r\nc\r\nd\r\ne\r\nf\r\n" printf "a\r\nb\r\nc\r\nd\r\ne\r\nf\r\n" | sed -n -e 'l' printf "a\r\nb\r\nc\r\nd\r\ne\r\nf\r\n" | sed s/$'\r'$// printf "a\r\nb\r\nc\r\nd\r\ne\r\nf\r\n" | sed s/$'\r'$// | sed -n -e 'l' printf "a\r\nb\r\r\r\r\r\r\r\r\r\r\nc\r\nd\r\ne\r\nf\r\n" | sed s/$'\r'*$// | sed -n -e 'l' printf "a\r\nb\r\r\r\r\r\r\r\r\r\r\nc\r\nd\r\ne\r\nf\r\n" | sed -E s/$'\r'+$// | sed -n -e 'l' # lacks a terminating \n though while read -d $'\r'; do printf "%s" "${REPLY}"; done < <((printf "a\r\nb\r\nc\r\nd\r\ne\r\nf\r\n")) while read -d $'\r'; do printf "%s" "${REPLY}"; done < <((printf "a\r\nb\r\nc\r\nd\r\ne\r\nf\r\n")) | sed -n -e 'l' #--------------------------------------- # create test files testfile="${HOME}/Desktop/testfile.txt" output="${HOME}/Desktop/output.txt" function createfiles() { testfile="${HOME}/Desktop/testfile.txt" output="${HOME}/Desktop/output.txt" /usr/bin/touch "$output" #/usr/bin/jot -b 'sample text' 10 | /bin/cat > "$testfile" /usr/bin/jot -b 'sample text' 10 | /bin/cat -n > "$testfile" printf "%s\r\n\r\n\r\r\n" "sample text" >> "$testfile" # append a line with a '\r\n' line separator printf "%s" "sample text" >> "$testfile" # append a last line without a terminating '\n' return 0 } createfiles # inspect test file cat -vet "$testfile" ed -s "$testfile" <<< $',l' sed -n -e 'l' "$testfile" ruby -n -e 'p $_.to_s' < "$testfile" function odcfile() { /usr/bin/od -A n -c < "$@" | /usr/bin/sed -E -e 's/^[[:space:]]{11}//' \ -e s/[[:space:]]{4}/$'\001'/g \ -e 's/[[:space:]]+//g' | \ /usr/bin/tr -d '\n' | /usr/bin/tr '\001' ' ' | \ /usr/bin/sed -e s/\\\\n/$'\\\\\\n\\\n'/g return 0 } odcfile "$testfile" # remove newlines "\n" # create a new file with newline characters replaced with a space sed -e :a -e '$!N; s/\n/ /g; ta' "$testfile" > "$output" odcfile "$output" # same, but in-place sed -i "" -e :a -e '$!N; s/\n/ /g; ta' "$testfile" odcfile "$testfile" createfiles # delete newlines in-place sed -i "" -e :a -e '$!N; s/\n//g; ta' "$testfile" odcfile "$testfile" createfiles # alternative for creating a new file without newlines tr -d '\n' < "$testfile" > "$output" odcfile "$output" # delete carriage returns "\r" # create a new file with carriage returns deleted sed -e s/$'\r'//g "$testfile" > "$output" sed -e s/$'\r'$//g "$testfile" > "$output" # only at line end odcfile "$output" # alternative tr -d '\r' < "$testfile" > "$output" odcfile "$output" # delete carriage returns in-place sed -i "" -e s/$'\r'//g "$testfile" > "$output" odcfile "$testfile" createfiles # cf. http://bash-hackers.org/wiki/doku.php?id=howto:edit-ed (Pitfalls) ed -s "$testfile" <<< $'H\n,g/\r/s/\r//\n,w' # delete one carriage return in a line ed -s "$testfile" <<< $'H\n,g/\r/s/\r//g\n,w' # delete all carriage returns in a line ed -s "$testfile" <<< $'H\n,g/\r$/s/\r$//g\n,w' # delete a carriage return at line end odcfile "$testfile" printf "\n" | od -A n -c printf "\012" | od -A n -c printf "\x0a" | od -A n -c printf '[ctrl-v][ctrl-j]' | od -A n -c # \n or ^J printf "\r" | od -A n -c printf "\015" | od -A n -c printf "\x0d" | od -A n -c printf '[ctrl-v][ctrl-j]' | od -A n -c # \r or ^M # vim createfiles vim "$testfile" #... :set number :set list :%s/^M//g :set fileformat=unix #:set fileformat=dos :x odcfile "$testfile" # edit files in-place with vim createfiles # delete newlines in-place vim -e -s +':%j' +'w!' +'qa!' "$testfile" odcfile "$output" createfiles # replace every \r with \n # cf. http://vim.wikia.com/wiki/Change_end-of-line_format_for_dos-mac-unix vim -e -s +':%s/\r/\r/g' +':set fileformat=unix' +'w!' +'qa!' "$testfile" odcfile "$output" createfiles # delete every \r vim -e -s +':%s/\r//g' +':set fileformat=unix' +'w!' +'qa!' "$testfile" odcfile "$output" createfiles # delete \r only when it occurs at the end of a line vim -e -s +':%s/\r$//g' +':set fileformat=unix' +'w!' +'qa!' "$testfile" odcfile "$output" createfiles # replace carriage return line endings with \n # cf. Getting rid of ^M - mixing dos and unix, http://www.vim.org/tips/tip.php?tip_id=26 printf "\r" >> "$testfile" vim -e -s +':g/\r$/s///g' +':set fileformat=unix' +'w!' +'qa!' "$testfile" odcfile "$testfile" createfiles # delete last \n of file vim -e -s +':set noeol bin' +':set fileformat=unix' +'w!' +'qa!' "$testfile" odcfile "$output" createfiles # change mixed mode files to DOS mode #vim -e -s +':%s/\r\r/\r/g' +'w!' +'qa!' "$testfile" sed -i '' -e s/$'\r\r'/$'\r'/g "$testfile" vim -e -s +':e ++ff=dos' +'w!' +'qa!' "$testfile" vim -e -s +':e ++ff=dos' +':set ff=dos' +'w!' +'qa!' "$testfile" odcfile "$output" vim "$testfile" :set ff? :x