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
Сообщения: 5167
Откуда: Москва
Код:
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
Сообщения: 5167
Откуда: Москва
Потому что в sed для команд типа a которым нужны целые строки последние обязательно должны обрамляться переводами строк, т.е. в одну строку этот скрипт никак не склеить.


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

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


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

Зарегистрированные пользователи: нет зарегистрированных пользователей


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

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