How to replace spaces with newlines/enter in a text-file?
A few choices:
-
The classic, use
tr
:tr ' ' '\n' < example
-
Use
cut
cut -d ' ' --output-delimiter=$'\n' -f 1- example
-
Use
sed
sed 's/ /\n/g' example
-
Use
perl
perl -pe 's/ /\n/g' example
-
Use the shell
foo=$(cat example); echo -e ${foo// /\\n}
Try the below command
awk -v RS=" " '{print}' file
OR
awk -v RS='[\n ]' '{print}' file
Example:
$ awk -v RS=" " '{print}' example
abc
cdef
ghi
jk
lmnopq
rst
uv
wxyz
Explanation:
RS (Record separator) is an built-in awk variable. In the first command, the value given to the Record separator variable is space. Awk breaks the line from printing whenever it finds a space.
In the second command, the value given to the RS variable is space or a new line character.This command eliminates the extra blank line appeared while running the first command.
You can use xargs
,
cat example | xargs -n 1
or, better
xargs -n 1 < example
Using a perl
oneliner:
perl -p -i -e 's/\s/\n/g' example
It will replace spaces and tabs with "ENTER" (aka \n
)
No one posted python, so here's that:
python -c "import sys;lines=['\n'.join(l.strip().split()) for l in sys.stdin.readlines()];print('\n'.join(lines))" < input.txt
We redirect input file into python
's stdin stream, and read it line by line. Each line is stripped of its trailing newline, split into words, and then rejoined into one string where each word is separated by newline.This is done to ensure having one word per line and avoid multiple newlines being inserted in case there's multiple spaces next to each other. Eventually we end up with list of strings, which is then again joined into larger string, and printed out to stdout stream. That later can be redirected to another file with > out.txt
redirection.