Я пытаюсь использовать sed для удаления всех символов новой строки между двумя шаблонами поиска.
Сначала я нашел этот пост, в котором я научился выполнять поиск между двумя шаблонами в разных строках.
sed -e '/begin/,/end/{s/begin/replacement/p;d}'
Затем я нашел этот пост, чтобы удалить все новые строки в файле.
sed ':a;N;$!ba;s/\n/ /g'
Я попытался объединить два ответа и придумал:
sed -e '/begin/,/end/{:a;N;$!ba;s/\n/ /p;d}'
Однако это не совсем работает. Он заменяет новые строки, начиная с правильной строки, но продолжается до конца файла. Пример приведен ниже:
Сэд Команда:
sed -e '/Seven/,/Fifteen/{:a;N;$!ba;s/\n/ /g}' input.txt
ввод.txt:
One Two Three
Four Five Six
Seven Eight Nine
Ten Eleven Twelve
Thirteen Fourteen Fifteen
Sixteen Seventeen Eighteen
Nineteen Twenty Twenty-One
Выход:
One Two Three
Four Five Six
Seven Eight Nine Ten Eleven Twelve Thirteen Fourteen Fifteen Sixteen Seventeen Eighteen Nineteen Twenty Twenty-One
Чего я действительно хочу:
One Two Three
Four Five Six
Seven Eight Nine Ten Eleven Twelve Thirteen Fourteen Fifteen
Sixteen Seventeen Eighteen
Nineteen Twenty Twenty-One
Спасибо за любую помощь!
,/Fifteen/
в начальном адресе. 23.08.2014/Seven/...
будет дважды совпадать в приведенных примерах данных, первое, как и ожидалось, но также и сSeventeen
. Это никогда не совпадает с последующимFifteen
, поэтому заканчивается концом файла и командойN
. Поскольку это может привести к неожиданным результатам, если вышеуказанная команда будет улучшена, возможно,/\<Seven\>/
может быть безопаснее. 23.08.2014