Sed: insert a newline. Why does not it work?
I want to replace "," by newline in each line, and I tried this:
echo "first,second,third" | sed 's/,/\n/g' It poduced this: firstnsecondnthird (no newlines there :-() So I tried this: echo "first,second,third" | sed 's/,/'"$(printf '\n')"'/g' Which produced this: firstsecondthird (still no newlines there :-(((((() There are millions of sed examples like this on the internet, so why dos not it work for me? Is there a workaround? |
It does work if you do it like this:
echo "one,two,three" | sed 's/,/\ /g' After the backslash you just hit return, you will get the PS2 prompt (probably >) and continue with the /g' part. From within a script I do like this sollution, when using this from the command line I do like this one better: echo "first,second,third" | awk 'BEGIN { FS=","; OFS="\n" } { print $1, $2, $3 }' Hope this helps. |
Well, your example with sed really works from the command line, but, actually I want to use it from a script.
(Only it was easier to test possible commands from the command line) The awk command would be OK, but that presumes that there are always 3 fields ($1, $2,$3), while in my case there can be any number of fields on the line. In the meantime I found that tr is the best to it: echo "first,second,third" | tr ',' '\n' Result: first second third It is just what I want. |
Try this instead:
echo "one,two,three" | sed "s/,/\\`echo -e '\n\r'`/g" |
Resurrecting Thread w/ the "Why"
Greetingz!
I'm 'resurrecting' this thread (read: posting to a very old thread) because I keep coming across this in google searches. I'm going to treat this as a two-part Question; 1st Question: How can I replace a character with a newline using sed? 2nd Question: Why doesn't sed use \n to denote a newline in a substitution expression? Answer for "How": Answer for "Why": Early versions of 'sed' (and implementations that copied them) did not originally accept escaped characters in the Right-Hand-Side (RHS). |
The literally-correct solution
Resurrecting this long-dead thread because it still ranks highly on Google search for this topic.
Having programmed Bash for a few decades, this type of question recurs often amongst Bash users, because the correct solution is not obvious to casual users. While it's true that the creative use of GNU command-line tools can be used to insert a literal newline into the middle of a command like sed, the truth is that one can simply use Bash literal strings instead. Here's how to represent newline from the Bash command line: $'\n' Yep, it's that simple: Code:
$ echo $'Hello,\nWorld' Code:
$ echo "Hello,"$'\n'"World" Code:
$ echo "Hello,$'\n'World" |
All times are GMT -5. The time now is 05:40 PM. |