Reputation: 361
I am having a sed replacement issue and am hoping one of you will be able to help me. I am sure I am missing something simple.
So I have a file containing text and a quote. The quote itself could be on one line or span multiple lines. I want the quote on a new line by itself. As an example here is an example of the file
And he said "This too
shall pass"
I need to change this to
And he said
"This too shall pass"
I tried the following sed but it didn't work -- it seems to match alright but failed to get a new line
/"This/ {
N
s/"This *\n*too *\n*shall *\n*pass"/\n"This too shall pass"/
}
Upvotes: 3
Views: 2913
Reputation: 45670
First join all lines, then insert a newline for the first "
and then a pass through tr
to single space everything (not that happy with the tr
part...)
$ sed -e :a -e '$!N; s/\n/ /; ta ; s/"/\n"/' multiline_input | tr -s " "
And he said
"This too shall pass"
Upvotes: 2
Reputation: 3967
Try replacing the "\n" with \ and an explicit new line; like the following --
/"This/ {
N
s/"This *\n*too *\n*shall *\n*pass"/\
"This too shall pass"/
}
Upvotes: 3