Sed многострочный вопрос замены - PullRequest
3 голосов
/ 15 июня 2011

У меня проблема с заменой sed, и я надеюсь, что один из вас сможет мне помочь. Я уверен, что упускаю что-то простое.

Итак, у меня есть файл, содержащий текст и цитату. Сама цитата может быть на одной строке или занимать несколько строк. Я хочу, чтобы цитата на новой строке сама по себе. В качестве примера приведу пример файла

And he said "This too
   shall pass"

Мне нужно изменить это на

And he said 
"This too shall pass"

Я попробовал следующий sed, но он не сработал - похоже, он подходит, но не смог найти новую строку

/"This/ {
    N
    s/"This *\n*too *\n*shall *\n*pass"/\n"This too shall pass"/
}

Ответы [ 3 ]

3 голосов
/ 15 июня 2011

Попробуйте заменить "\ n" на \ и явную новую строку; как следующее -

/"This/ {
N
s/"This *\n*too *\n*shall *\n*pass"/\
"This too shall pass"/
}
2 голосов
/ 15 июня 2011
perl -0777 -ne 's/\s+/ /g;s/"/\n"/;print "$_\n"'
2 голосов
/ 15 июня 2011

Сначала объедините все строки, затем вставьте новую строку для первого ", а затем пропустите через tr, чтобы разделить все пробелами (не то, чтобы довольны частью tr ...)

$ sed -e :a -e '$!N; s/\n/ /; ta ; s/"/\n"/' multiline_input | tr -s " "
And he said 
"This too shall pass"
...