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

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

29.02.2024, 14:58. Показов 869. Ответов 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
6688 / 2279 / 348
Регистрация: 10.12.2013
Сообщений: 7,888
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
6688 / 2279 / 348
Регистрация: 10.12.2013
Сообщений: 7,888
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
6688 / 2279 / 348
Регистрация: 10.12.2013
Сообщений: 7,888
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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru