How do I remove newlines from a text file?

LinuxBashScriptingShellSed

Linux Problem Overview


I have the following data, and I need to put it all into one line.

I have this:

22791

;

14336

;

22821

;

34653

;

21491

;

25522

;

33238

;

I need this:

22791;14336;22821;34653;21491;25522;33238;

EDIT

None of these commands is working perfectly.

Most of them let the data look like this:

22791

;14336

;22821

;34653

;21491

;25522

Linux Solutions


Solution 1 - Linux

tr --delete '\n' < yourfile.txt
tr -d '\n' < yourfile.txt

Edit:

If none of the commands posted here are working, then you have something other than a newline separating your fields. Possibly you have DOS/Windows line endings in the file (although I would expect the Perl solutions to work even in that case)?

Try:

tr -d "\n\r" < yourfile.txt

If that doesn't work then you're going to have to inspect your file more closely (e.g. in a hex editor) to find out what characters are actually in there that you want to remove.

Solution 2 - Linux

perl -p -i -e 's/\R//g;' filename

Must do the job.

Solution 3 - Linux

tr -d '\n' < file.txt

Or

awk '{ printf "%s", $0 }' file.txt

Or

sed ':a;N;$!ba;s/\n//g' file.txt

This page here has a bunch of other methods to remove newlines.

edited to remove feline abuse :)

Solution 4 - Linux

paste -sd "" file.txt

Solution 5 - Linux

Expanding on a previous answer, this removes all new lines and saves the result to a new file (thanks to @tripleee):

tr -d '\n' < yourfile.txt > yourfile2.txt

Which is better than a "useless cat" (see comments):

cat file.txt | tr -d '\n' > file2.txt

Also useful for getting rid of new lines at the end of the file, e.g. created by using echo blah > file.txt.

Note that the destination filename is different, important, otherwise you'll wipe out the original content!

Solution 6 - Linux

You can edit the file in vim:

$ vim inputfile
:%s/\n//g

Solution 7 - Linux

use

head -n 1 filename | od -c 

to figure WHAT is the offending character. then use

tr -d '\n' <filename

for LF

tr -d '\r\n' <filename

for CRLF

Solution 8 - Linux

Use sed with POSIX classes

This will remove all lines containing only whitespace (spaces & tabs)

sed '/^[[:space:]]*$/d'

Just take whatever you are working with and pipe it to that

Example
cat filename | sed '/^[[:space:]]*$/d'

Solution 9 - Linux

Using man 1 ed:

# cf. http://wiki.bash-hackers.org/doku.php?id=howto:edit-ed 
ed -s file <<< $'1,$j\n,p'  # print to stdout 
ed -s file <<< $'1,$j\nwq'  # in-place edit

Solution 10 - Linux

Was having the same case today, super easy in vim or nvim, you can use gJ to join lines. For your use case, just do

99gJ

this will join all your 99 lines. You can adjust the number 99 as need according to how many lines to join. If just join 1 line, then only gJ is good enough.

Solution 11 - Linux

$ perl -0777 -pe 's/\n+//g' input >output

$ perl -0777 -pe 'tr/\n//d' input >output

Solution 12 - Linux

If the data is in file.txt, then:

echo $(<file.txt) | tr -d ' '

The '$(<file.txt)' reads the file and gives the contents as a series of words which 'echo' then echoes with a space between them. The 'tr' command then deletes any spaces:

22791;14336;22821;34653;21491;25522;33238;

Solution 13 - Linux

xargs consumes newlines as well (but adds a final trailing newline):

xargs < file.txt | tr -d ' '

Solution 14 - Linux

Assuming you only want to keep the digits and the semicolons, the following should do the trick assuming there are no major encoding issues, though it will also remove the very last "newline":

$ tr -cd ";0-9"

You can easily modify the above to include other characters, e.g. if you want to retain decimal points, commas, etc.

Solution 15 - Linux

Nerd fact: use ASCII instead.

tr -d '\012' < filename.extension   

(Edited cause i didn't see the friggin' answer that had same solution, only difference was that mine had ASCII)

Solution 16 - Linux

Using the gedit text editor (3.18.3)

  1. Click Search
  2. Click Find and Replace...
  3. Enter \n\s into Find field
  4. Leave Replace with blank (nothing)
  5. Check Regular expression box
  6. Click the Find button

Note: this doesn't exactly address the OP's original, 7 year old problem but should help some noob linux users (like me) who find their way here from the SE's with similar "how do I get my text all on one line" questions.

Solution 17 - Linux

I would do it with awk, e.g.

awk '/[0-9]+/ { a = a $0 ";" } END { print a }' file.txt

(a disadvantage is that a is "accumulated" in memory).

EDIT

Forgot about printf! So also

awk '/[0-9]+/ { printf "%s;", $0 }' file.txt

or likely better, what it was already given in the other ans using awk.

Solution 18 - Linux

I usually get this usecase when I'm copying a code snippet from a file and I want to paste it into a console without adding unnecessary new lines, I ended up doing a bash alias
( i called it oneline if you are curious )

xsel -b -o | tr -d '\n' | tr -s ' ' | xsel -b -i
  • xsel -b -o reads my clipboard

  • tr -d '\n' removes new lines

  • tr -s ' ' removes recurring spaces

  • xsel -b -i pushes this back to my clipboard

after that I would paste the new contents of the clipboard into oneline in a console or whatever.

Solution 19 - Linux

You are missing the most obvious and fast answer especially when you need to do this in GUI in order to fix some weird word-wrap.

  • Open gedit

  • Then Ctrl + H, then put in the Find textbox \n and in Replace with an empty space then fill checkbox Regular expression and voila.

Solution 20 - Linux

To also remove the trailing newline at the end of the file

python -c "s=open('filename','r').read();open('filename', 'w').write(s.replace('\n',''))"

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAlucardView Question on Stackoverflow
Solution 1 - LinuxTyler McHenryView Answer on Stackoverflow
Solution 2 - LinuxZyXView Answer on Stackoverflow
Solution 3 - LinuxVivin PaliathView Answer on Stackoverflow
Solution 4 - LinuxAmardeep AC9MFView Answer on Stackoverflow
Solution 5 - LinuxNagevView Answer on Stackoverflow
Solution 6 - LinuxloganaayaheeView Answer on Stackoverflow
Solution 7 - LinuxMrEView Answer on Stackoverflow
Solution 8 - LinuxjasonleonhardView Answer on Stackoverflow
Solution 9 - LinuxcarlmundView Answer on Stackoverflow
Solution 10 - LinuxLeOn - Han LiView Answer on Stackoverflow
Solution 11 - LinuxGreg BaconView Answer on Stackoverflow
Solution 12 - LinuxJonathan LefflerView Answer on Stackoverflow
Solution 13 - LinuxmarkyView Answer on Stackoverflow
Solution 14 - LinuxpeakView Answer on Stackoverflow
Solution 15 - LinuxByfjunarnView Answer on Stackoverflow
Solution 16 - LinuxHastig ZusammenstellenView Answer on Stackoverflow
Solution 17 - LinuxShinTakezouView Answer on Stackoverflow
Solution 18 - LinuxMohammad AbuShadyView Answer on Stackoverflow
Solution 19 - LinuxEduard FlorinescuView Answer on Stackoverflow
Solution 20 - LinuxcrizCraigView Answer on Stackoverflow