Created
January 31, 2012 22:27
-
-
Save jfsiii/1713447 to your computer and use it in GitHub Desktop.
No new line
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## This works as I wish (append to EOL) | |
→ echo -n "foo bar baz" >> out; echo -n "EOL" >> out; cat out; rm out | |
foo bar bazEOL | |
## Q: What in this `sed` causing a new line? | |
→ echo -n "foo bar baz" | sed "s/ /\&/g" >> out; echo -n "EOL" >> out; cat out; rm out | |
foo&bar&baz | |
EOL | |
## A: `sed`. | |
## From the `sed` manpage: "Normally, sed cyclically copies a line of input, not including its terminating newline character, into a pattern space, (unless there is something left after a ``D'' function), applies all of the commands with addresses that select that pattern space, copies the pattern space to the standard output, appending a newline, and deletes the pattern space." | |
## I used a simple `awk` program to clean up after `sed` | |
## (`echo` text updated to be more representative of the actual input which identified the problem) | |
echo -n "outlaksdjfl;aksjdfl;aksjdfl;kajsd;kdfjals;kdfjal;skjdf;laskjdfl;aksjdfl;kajsdfl;kajsdfl;kjas;ldfkjaslkdfjla;skjdfl;aksjdfl;aksjdfl;kasjdfl;kajsdf;lkajsd;flkjas;ldkfjas;lkdfja;lskdjf;alskdfj | |
outlaksdjfl;aksjdfl;aksjdfl;kajsd;kdfjals;kdfjal;skjdf;laskjdfl;aksjdfl;kajsdfl;kajsdfl;kjas;ldfkjaslkdfjla;skjdfl;aksjdfl;aksjdfl;kasjdfl;kajsdf;lkajsd;flkjas;ldkfjas;lkdfja;lskdjf;alskdfjoutlaksdjfl;aksjdfl;aksjdfl;kajsd;kdfjals;kdfjal;skjdf;laskjdfl;aksjdfl;kajsdfl;kajsdfl;kjas;ldfkjaslkdfjla;skjdfl;aksjdfl;aksjdfl;kasjdfl;kajsdf;lkajsd;flkjas;ldkfjas;lkdfja;lskdjf;alskdfjoutlaksdjfl;aksjdfl;aksjdfl;kajsd;kdfjals;kdfjal;skjdf;laskjdfl;aksjdfl;kajsdfl;kajsdfl;kjas;ldfkjaslkdfjla;skjdfl;aksjdfl;aksjdfl;kasjdfl;kajsdf;lkajsd;flkjas;ldkfjas;lkdfja;lskdjf;alskdfjoutlaksdjfl;aksjdfl;aksjdfl;kajsd;kdfjals;kdfjal;skjdf;laskjdfl;aksjdfl;kajsdfl;kajsdfl;kjas;ldfkjaslkdfjla;skjdfl;aksjdfl;aksjdfl;kasjdfl;kajsdf;lkajsd;flkjas;ldkfjas;lkdfja;lskdjf;alskdfjoutlaksdjfl;aksjdfl;aksjdfl;kajsd;kdfjals;kdfjal;skjdf;laskjdfl;aksjdfl;kajsdfl;kajsdfl;kjas;ldfkjaslkdfjla;skjdfl;aksjdfl;aksjdfl;kasjdfl;kajsdf;lkajsd;flkjas;ldkfjas;lkdfja;lskdjf;alskdfjoutlaksdjfl;aksjdfl;aksjdfl;kajsd;kdfjals;kdfjal;skjdf;laskjdfl;aksjdfl;kajsdfl;kajsdfl;kjas;ldfkjaslkdfjla;skjdfl;aksjdfl;aksjdfl;kasjdfl;kajsdf;lkajsd;flkjas;ldkfjas;lkdfja;lskdjf;alskdfj | |
outlaksdjfl;aksjdfl;aksjdfl;kajsd;kdfjals;kdfjal;skjdf;laskjdfl;aksjdfl;kajsdfl;kajsdfl;kjas;ldfkjaslkdfjla;skjdfl;aksjdfl;aksjdfl;kasjdfl;kajsdf;lkajsd;flkjas;ldkfjas;lkdfja;lskdjf;alskdfjoutlaksdjfl;aksjdfl;aksjdfl;kajsd;kdfjals;kdfjal;skjdf;laskjdfl;aksjdfl;kajsdfl;kajsdfl;kjas;ldfkjaslkdfjla;skjdfl;aksjdfl;aksjdfl;kasjdfl;kajsdf;lkajsd;flkjas;ldkfjas;lkdfja;lskdjf;alskdfjoutlaksdjfl;aksjdfl;aksjdfl;kajsd;kdfjals;kdfjal;skjdf;laskjdfl;aksjdfl;kajsdfl;kajsdfl;kjas;ldfkjaslkdfjla;skjdfl;aksjdfl;aksjdfl;kasjdfl;kajsdf;lkajsd;flkjas;ldkfjas;lkdfja;lskdjf;alskdfjoutlaksdjfl;aksjdfl;aksjdfl;kajsd;kdfjals;kdfjal;skjdf;laskjdfl;aksjdfl;kajsdfl;kajsdfl;kjas;ldfkjaslkdfjla;skjdfl;aksjdfl;aksjdfl;kasjdfl;kajsdf;lkajsd;flkjas;ldkfjas;lkdfja;lskdjf;alskdfjoutlaksdjfl;aksjdfl;aksjdfl;kajsd;kdfjals;kdfjal;skjdf;laskjdfl;aksjdfl;kajsdfl;kajsdfl;kjas;ldfkjaslkdfjla;skjdfl;aksjdfl;aksjdfl;kasjdfl;kajsdf;lkajsd;flkjas;ldkfjas;lkdfja;lskdjf;alskdfj" \ | |
| awk '{ORS=""; gsub("dfl", "REPLACEMENT"); if (NR!=1) print "\n"; print;}' >> out; \ | |
echo -n "FINAL_CHARACTER" >> out; \ | |
cat out; rm out; |
I just realized the awk
program can be shortened to awk '{ORS=""; if (NR!=1) print "\n"; print;}'
Only print newlines (before the input line) for those lines greater than 1.
It turns out there's no reason to even call sed
. If gsub("dfl", "REPLACEMENT");
is added to the awk
program, the desired results are achieved using only one program.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
The first echo example wasn't quite representative of the actual output. The actual output had newlines that I wanted to keep. It's only the last newline (the one added by
sed
) that I want to replaceawk
was the answer.I set the output record separator (
ORS
, normally\n
) to an empty string (which would cause all the lines to run together).Then, if it's the first line I print it (without the newline). For all others, I print a newline first then the line (without the newline).
That way, I can append to the end of the line as opposed to a new one