Viji
@Viji
Associate DevOps Engineer

Можно ли записать данное sed выражение в одну строку?

работает хорошо, ищет между строками 1 и 40, когда находит, добавляет еще строку после: alb.ingress.kubernetes\/load-balancer-attributes:\ "access_logs.enabled
sed -i '1,40{/alb.ingress.kubernetes\/group.name:/a\
\ \ \ \ alb.ingress.kubernetes\/load-balancer-attributes:\ "access_logs.enabled"
}' deployment.yaml


но хотелось бы в 1 линию. Пытался заменить новые строки на \n, дает ошибку
sed: -e expression #1, char 0: unmatched `{'
  • Вопрос задан
  • 142 просмотра
Пригласить эксперта
Ответы на вопрос 2
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
Что-то непонятно у вас с текстом.
Приведите несколько строк из файла с alb.ingress.kubernetes
там перевода строк нет, или как?
sed не умеет работать с мультистроковыми регулярками, он считывает текст построчно и затем сравнивает с паттерном, при этом в считанной строке символа перевода строки собственно даже и не будет.
Можно попробовать работать с мультилайн через наполнение pattern space, правда там будет конструкция посложнее.

Наверное проще, если вы нормально приведете пример вашего лога, и можно будет посмотреть как там зацепиться.
Ответ написан
Комментировать
fzfx
@fzfx
18,5 дм
как вариант:
sed -i '1,40{/alb.ingress.kubernetes\/group.name:/a\'$'\n''\ \ \ \ alb.ingress.kubernetes\/load-balancer-attributes:\ "access_logs.enabled"'$'\n''}' deployment.yaml
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы