Я учусь Сед. Казалось, что все идет хорошо, пока я не наткнулся на N (многострочный следующий). Я создал этот файл (guide.txt) для практики / понимания / контекста. Вот содержимое указанного файла ...
This guide is meant to walk you through a day as a Network
Administrator. By the end, hopefully you will be better
equipped to perform your duties as a Network Administrator
and maybe even enjoy being a Network Administrator that much more.
Network Administrator
Network Administrator
I'm a Network Administrator
Поэтому моя цель - заменить ВСЕ экземпляры «Администратор сети» на «Системный пользователь». Поскольку первый экземпляр «Администратора сети» отделен новой строкой (\ n), мне нужен многострочный оператор следующего оператора (N), чтобы добавить строку, начинающуюся с «Администратор», с предыдущей строкой, заканчивающейся «Сеть \ n» , Нет проблем. Но я также хочу перехватить все другие однострочные экземпляры «Администратор сети».
Из моего исследования я узнал, что мне понадобятся две команды замещения; один для новой строки, разделенной строкой, и один для остальных. Кроме того, произошел некоторый джайв из-за последней строки, содержащей совпадение подстановки и следующей многострочной. Так что я создаю это ...
$ sed '
> s/Network Administrator/System User/
> N
> s/Network\nAdministrator/System\nUser/
> ' guide.txt
Это возвращает эти результаты ...
This guide is meant to walk you through a day as a System
User. By the end, hopefully you will be better
equipped to perform your duties as a System User
and maybe even enjoy being a Network Administrator that much more.
System User
Network Administrator
I'm a System User
Я думал, что однострочная подстановка перехватит все «нормальные» экземпляры «Network Administrator» и поменяет их на «System User», тогда как многострочный оператор сработает с магией на экземпляре, отделенном символом новой строки, но, как вы могу видеть, что это вернуло, что я считаю, неожиданные результаты.
После некоторой возни я приземлился на это ...
$ sed '
> s/Network Administrator/System User/
> N
> s/Network\nAdministrator/System\nUser/
> s/Network Administrator/System User/
> ' guide.txt
И вуаля, я получаю желаемый результат ...
This guide is meant to walk you through a day as a System
User. By the end, hopefully you will be better
equipped to perform your duties as a System User
and maybe even enjoy being a System User that much more.
System User
System User
I'm a System User
Почему это работает, а оригинальный скрипт sed - нет? Я очень хочу это понять.
Заранее благодарю за любую помощь.