BSDPORTAL.RU

На этом сайте обсуждаются вопросы использования ОС FreeBSD
 Портал  •  Статьи  •  Форум  •  Wiki  •  Поиск  •  FAQ  •  Обои  •   Официальная документация  •  Новые темы 

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Вопрос по потоковому редактору SED
СообщениеДобавлено: Ср 22 ноя, 2017 5:40 pm 
Не в сети

Зарегистрирован: Ср 15 ноя, 2006 12:46 pm
Сообщения: 98
Откуда: st.Petersburg
Привет!
Есть вопрос по потоковому редактору sed.
В файле куча строк и надо только после трёх определённых, которые совпадут по условию вставить несколько других строк.
Допустим есть фаил, filetest.
Фаил содержит:
string1
string2
string3
string4
string5
string6
Только после строк совпадающих с условием, а это в примере строки:
string3
string4
string5
можно вставить три строки:
line 1
line 2
line 3
В результате должно получиться:
string
string1
string2
string3
string4
string5
line 1
line 2
line 3
string6
Хорошо подходит для начала решение:

Код:
sed '/string3/{N;/string4/{N;/string5/s/.*/замена/}}' filetest

или

Код:
sed '/string3/{N;N;s/string3\nstring4\nstring5/заменяющий текст/}'

НО она отрабатывает ТОЛЬКО НА ЗАМЕНУ так как в приведённом примере используется команда 's'
Правильно будет использовать в потоковом редакторе SED команду 'a' но блин куда её влепить не знаю уже голова дымится, команда d;p;s отрабатывает а 'a' не хочет!
Возможно кто нибудь уже АС в SED и подскажет как правильно написать?
Заранее благодарен!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Ср 22 ноя, 2017 5:48 pm 
Не в сети
Модератор

Зарегистрирован: Сб 11 сен, 2004 6:33 am
Сообщения: 5163
Откуда: Москва
Код:
sed '/string3/{N;/string4/{N;/string5/{a\
line 1\
line 2\
line 3
};};}'


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Ср 22 ноя, 2017 5:58 pm 
Не в сети

Зарегистрирован: Ср 15 ноя, 2006 12:46 pm
Сообщения: 98
Откуда: st.Petersburg
[root@bubububb ~]# sed '/string5/{N;/string6/{N;/string7/{a\ line 1\ line 2\ line 3};};}' test
sed: -e expression #1, char 0: unmatched `{'
И вот такая дребедень целый день =) целый день! =)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Ср 22 ноя, 2017 6:46 pm 
Не в сети

Зарегистрирован: Ср 15 ноя, 2006 12:46 pm
Сообщения: 98
Откуда: st.Petersburg
Если из файла запускать как вы написали то отрабатывает! Спасибо!
А почему в строке как я написал не хочет, ругается что (на сколько я понял unmatched `{' ....) не парный символ?
Фигурные скобки закрыты в строке !!!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Ср 22 ноя, 2017 8:06 pm 
Не в сети
Модератор

Зарегистрирован: Сб 11 сен, 2004 6:33 am
Сообщения: 5163
Откуда: Москва
Потому что в sed для команд типа a которым нужны целые строки последние обязательно должны обрамляться переводами строк, т.е. в одну строку этот скрипт никак не склеить.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Зарегистрированные пользователи: Bing [Bot], Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB
Яндекс.Метрика