Как я могу поменять местами значение в строке?

Важное примечание: я советую сделать снимок виртуальной машины за пару часов, прежде чем возиться с разделами. Часто моментальные снимки в VMWare ошибаются, когда модификации вносятся сразу после их внесения.

Самый простой способ сделать это - создать новый диск, новый первичный раздел и добавить его в свою группу томов.

Вам необходимо создать новый раздел с помощью fdisk.

Затем, чтобы создать новый раздел на новом диске (или / dev / sda, и раздел 3 вместо раздела 1 для старого диска - / dev / sda)

sudo fdisk /dev/sdb
n         -- new 
p         -- primary
(accept all defaults with ENTER)

измените тип раздела:

t
1
8E         -- Linux LVM

чтобы написать его:

w        
q

(я предполагаю, что / dev / sdb1 был создан на этом этапе. Если другой, замените его в vgextend ниже)

В зависимости от системы он может попросить вас перезагрузиться в это время. Вы либо перезагружаетесь, либо запускаете:

partprobe

Если у вас нет команды, установите ее с помощью:

sudo apt-get install parted

Проверьте, с какой группой томов (VG Name) входит:

vgdisplay

С этого момента я предполагаю, что это веб-сервер- -vg

Вы добавляете раздел в группу томов:

vgextend webserver--vg /dev/sdb1

Затем вы можете изменить его размер с помощью (в реальном времени, лучше, чем выполнение lvextend + изменение размера, как в руководстве в справочнике)

lvextend -r -l+100%FREE /dev/vg/webserver--vg-root

PS Это альтернативный путь к @Stephen Kitt без удаления разделов. Он достаточно гибкий для увеличения размера вашего диска, процедура менее сложна, недостатком является то, что со временем управление файловой системой будет более сложным при расширении файловой системы. Как бы то ни было, эта процедура часто больше ориентирована на физические машины, например. рост LVM-разделов на втором диске.

Ссылки:

Перечитайте таблицу разделов без перезагрузки системы Linux
Как управлять и использовать LVM (логическое управление томами)

Связанный вопрос:

Увеличение корня LVM

1
13.09.2017, 00:03
2 ответа
sed -e 's/online=YES/online=NO/' -e t -e 's/online=NO/online=YES/'

Команда tв sedперейдет к заданной метке (или к концу сценария sed, если метка не указана ), если предыдущая команда sпроизвела замену с момента последнего чтения входной строки.

В этом случае будет пропущена вторая замена, если была выполнена первая замена.


В случае, если в строке может быть несколько online=YESили online=NO, используйте

sed -e 's/online=YES/online=MAYBE/g' \
    -e 's/online=NO/online=YES/g' \
    -e 's/online=MAYBE/online=NO/g' 

, где строка MAYBEиначе не связана с шаблоном online=. Это было бы похоже на использование временной переменной для замены значений двух переменных.

Тестирование:

$ echo "online=YES online=YES online=NO online=YES" | sed -e 's/online=YES/online=MAYBE/g' -e 's/online=NO/online=YES/g' -e 's/online=MAYBE/online=NO/g'
online=NO online=NO online=YES online=NO

Причина, по которой команда nне совсем работает вместо команды tв первом примере, заключается в том, что она считывает следующую строку ввода на полпути сценария и запускает вторую половину сценария. на этой линии:

$ ( echo "online=YES"; echo "online=YES" ) | sed -e 's/online=YES/online=NO/' -e n -e 's/online=NO/online=YES/'
online=NO
online=YES

Вы получите одинаковый вывод для двух NOстрок.

4
27.01.2020, 23:18

Использование команды t, как указал @Kusalananda, работает для вашего примера (и большинства других ). Чтобы на самом деле поменять местами две строки за одну замену, вы можете сделать что-то вроде

sed 'H;x;s/^/#NO#YES#NO/;s/.*#\(.*\)#\([^#]*\).*\n\(.*online=\)\1/\3\2/'

Это может быть легко расширено до трех или более строк для вращения.

Чтобы обработать больше строк, строк с большим количеством замен или строк без замен вообще, вы можете расширить его, чтобы зациклить замену:

sed -e 'H;x;s/online=/&#/g;s/^/#NO#YES#NO#/;:a' -e 's/\(.*#\)\(.*\)#\([^#]*\)\(#.*\n\)\(.*online=\)#\2/\1\2#\3\4\5\3/;ta' -e 's/.*\n//'
0
27.01.2020, 23:18

Теги

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