С Новым годом! Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
1 / 0 / 1
Регистрация: 02.08.2014
Сообщений: 56

Добавить строку в файл через одну от заданной строки

29.02.2024, 14:58. Показов 843. Ответов 5

Студворк — интернет-сервис помощи студентам
Допустим есть yaml файл

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
all:
  children:
    tag1:
      children:
        zone1:
          hosts:
            fqdn1:
        zone2:
          hosts:
            fqdn2:
        zone3:
          hosts:
            fqdn3:
        zone4:
          hosts:
            fqdn4:
     tag2:
        hosts:
          fqdn1:
так вот нужно добавить хостов в zone2 - соответственно сразу после hosts

гуру регулярок и повелители командной строки пожалуйста поделитесь опытом
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.02.2024, 14:58
Ответы с готовыми решениями:

Файл: Вставить в файл через каждые две строки одну пустую строку
Создайте текстовой файл в своей директории. Напишите программу, которая вставляет в этот файл через каждые две строки одну пустую строку. С...

Подпрограммы: соединить две строки в одну, обрезать строку до заданной длины
Помогите, пожалуйста, написать программу на ассемблере: Разработать две подпрограммы, одна из которых соединяет две строки в одну, а...

2.Дан текстовый файл, содержащий строки. Вывести на экран все его строки через одну.
2.Дан текстовый файл, содержащий строки. Вывести на экран все его строки через одну.

5
 Аватар для volodin661
6671 / 2264 / 346
Регистрация: 10.12.2013
Сообщений: 7,827
29.02.2024, 17:53
решение без разбора yaml - идеологически неправильно.

вот оно, неправильное, с помощью текстового редактора:
Bash
1
vim -cg/zone2:/norm_jjwOwww.newhost.com: -cx file.yaml
правильное, с разбором - это с помощью Perl, Python etc



ps: где www.newhost.com - это имя хоста
1
1 / 0 / 1
Регистрация: 02.08.2014
Сообщений: 56
02.03.2024, 09:38  [ТС]
что значат флаги -cg, -cx?
а что такое "norm_jjwO"?
и можно ли тут использовать регулярки?

и можно ли как-то это же сделать каким-нибудь sed?
0
 Аватар для volodin661
6671 / 2264 / 346
Регистрация: 10.12.2013
Сообщений: 7,827
02.03.2024, 15:02
onebigtrouble,
это текстовый редактор

norm - переключение в режим 'normal' ( позиционирование, удаление )
j - курсор вниз
w - прыжок на начало слова
О - вставка новой пустой на месте курсора и переключение в режим 'insert'
и далее собственно вставляемый текст

( всего режимов какбэ три ( COMMAND, NORMAL, INSERT ) . на самом деле больше. Основной режим - NORMAL;
чтоб было понятно: нажатие клавиши n в режиме normal - это одно, в режиме insert - другое, в режиме command - третье. Звучит ужасно, но запоминается всё почему-то мгновенно )



в общем виде так:

Bash
1
vim -c ":g/zone2:/norm jjwOwww.newhost.com"  -c ":любая команда редактора"  -c ":любая команда редактора" -c ":x"  file.txt

:x - выход с сохранением изменений

Добавлено через 4 минуты
Цитата Сообщение от onebigtrouble Посмотреть сообщение
и можно ли как-то это же сделать каким-нибудь sed?
можно

Добавлено через 11 минут
Цитата Сообщение от onebigtrouble Посмотреть сообщение
и можно ли тут использовать регулярки?
можно. и синтаксис весьма похож на sed; диалект немного другой.

в строках с 1-ой по 25-ю заменить все А на все В
Bash
1
vim -c "1,25 s/A/B/g" -c x file.txt
Добавлено через 1 час 34 минуты
Bash
1
perl -pe '/zone2/../hosts:/?$n=$.:defined$n&&$n+1==$.?do{/^(\s+)/;$_="${1}NEWHOST.COM:\n$_"}:0' file.yaml
1
1 / 0 / 1
Регистрация: 02.08.2014
Сообщений: 56
03.03.2024, 20:20  [ТС]
а регулярки именно в той команде с вимом не работают?

например если я хочу заменить при нахождении либо строки с zone2: или zone2a: или zone2b - вот так как ниже у меня не получилось использовать

vim '-cg/zone2:|zone2a:|zone2b/norm_jjwOwww.newhost.com:' -cx file.yaml
0
 Аватар для volodin661
6671 / 2264 / 346
Регистрация: 10.12.2013
Сообщений: 7,827
03.03.2024, 21:07
Цитата Сообщение от onebigtrouble Посмотреть сообщение
а регулярки именно в той команде с вимом регулярки не работают?
работают

Добавлено через 2 минуты
Bash
1
vim -c 'g/zone2/norm jjwOMY.NEWHOST.ORG' -cx file.yaml
Добавлено через 3 минуты
Вот эта часть:
Code
1
g/ здесь рег. выр/здесь любая команда vim
выполняется для каждой строки редактируемого файла

Добавлено через 17 минут
Например, у тебя есть: zone2, zone2a , zone2b, zone2c, zone2d

И надо вставить хост в zone2 и zone2a, а в zone2b 2c и 2d не надо.

тогда так:

Perl
1
g/\vzone2[^bcd]/norm jjwOMY.NEWHOST.ORG
( на \v внимания не обращай; это специфично для vim - переключение движков регулярных выражений;
\v - обозначает very magic и он ближе к PCRE ( perl compatible regular expressions )

Добавлено через 14 минут
повторюсь, серьёзным решением является разбор YAML на приличном скриптовом языке.
Perl или Python - лучшие кандидаты, поскольку оба всегда присутствуют в системе и
имеют проверенный модуль YAML.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.03.2024, 21:07
Помогаю со студенческими работами здесь

Как записать 3 числа в одну строку в текстовый файл. Записывается в 3 строки
Помогите найти строку которая записывает в файле в новую строку, мне необходимо записывать в одну строку, а записывает в 3 строки ...

Сгруппировать строки, а разные значения в столбце записать в одну строку через запятую
Как сделать? :sorry:Все значения по полям совпадают кроме значений в двух (в дальнейшем будет 4 столбца - но я сама потом сделаю) столбцах,...

Как добавить строку в файл через bat-команду?
Доброго времени суток, уважаемые форумчане!!! подскажите пжлста, кто знает, как можно добавить строку в конец файла с помощью команды...

Сравнить два текстовых файла и вывести одинаковые строки ( значения выше на одну строку) в третий файл
Добрый вечер. Нужна помощь знатоков Есть текстовый файл по пути D:\arxiv\rezultcat.txt с содержимым: MPEG-4-5min 23s-458 MB ...

Добавить в файл строку из 12 дефисов, разместив ее после пятой строки
всем привет! решите, пжл: Имеется текстовый файл, добавить в него строку из 12-ти дефисов, разместив ее после пятой строки. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru