Как добавить 12 пробелов к следующей строке после совпадения строки в оболочке?

Простая перезагрузка

Похоже, у Btrfs есть проблемы с изменением имен файлов блочных устройств (, например, /dev/sda ). У меня была такая же проблема:

Создал файловую систему Btrfs, записал некоторые данные, размонтировал, удалил диск из моей системы (это 2,5-дюймовый диск SATA ). Неделю спустя я снова подключил диск с горячей заменой, и мне не удалось его смонтировать. Can't read superblock.btrfs rescue super-recoverсказал, что все хорошо. Я даже сделал btrfs check, и это также подтвердило, что все хорошо.

У меня более старое ядро ​​:4.15-Я думаю, что это уже решено в более новой версии Btrfs (более новые ядра ), но для старых -просто перезагрузитесь.

Система перечислит диски, и ваша файловая система Btrfs должна смонтироваться без проблем.

Если это не работает, -попробуйте обновить ядро.

0
30.09.2021, 12:46
2 ответа

Вы не можете сделать это напрямую с шаблонами REGEX, но вы можете (ab )использовать опцию printfдля левого -поглаживания с пробелами и пустой строкой:

sed "/pattern/a$(printf '\%12s')SystemCgroup =.../" file 

Обратите внимание, что знак процента необходимо экранировать.

0
30.09.2021, 13:53

Использование синтаксического анализатора TOMLtomlq(изhttps://kislyuk.github.io/yq/):

tomlq -t '.plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options.SystemdCgroup |= true' config.toml

Используйте tomlqс параметрами--in-place(или -i), чтобы выполнить редактирование в -месте.

Выражение, используемое с tomlqвыше, является jqвыражением(tomlqявляется jqоболочкой ), которая устанавливает определенный ключ в структуре документа в значение true.

Обратите внимание, что интервал в документе не имеет значения для достоверности структуры документа.


В общем, с sed, если вы хотите вставить строку текста с той же глубиной отступа, что и предыдущая строка, рассмотрите возможность повторного использования отступа этой предыдущей строки.

/^\([[:blank:]]*\)\[.*runc\.options\].*/ {
    h
    s//\1  SystemdCgroup = true/
    H
    g
}

Этот sedскрипт соответствует метке определенного раздела, который мы ищем, и запоминает количество пробелов, предшествующих [в этой строке. Он сохраняет копию строки в области хранения, заменяет строку в буфере нашими новыми данными, используя \1для вставки исходного отступа. Затем добавляет буфер к пространству хранения (, который вставляет символ новой строки )и извлекает пространство хранения в буфер редактирования для печати.

Обратите внимание, однако, что sedи аналогичные инструменты, ориентированные на строку -, часто не подходят для работы со структурированными форматами документов, такими как TOML, YAML, JSON и XML. Эти форматы не всегда разделяются строкой -, поскольку они могут требовать определенного кодирования данных.

0
30.09.2021, 14:29

Теги

Похожие вопросы