С sed
есть два пути. Вы можете выбрать включительно или исключительно. В вашем случае выбор включительно означает печать всех строк, начинающихся с совпадения по '^*\*\*'
до одной из ^ *
(что бы это ни было) или ^$
пустой строки.
Выборка включительно может быть задана с помощью любого из выражений диапазона, продемонстрированных в других ответах, и предполагает указание образца начать печатать здесь до образца до конца здесь.
Выбор эксклюзивный работает противоположным образом. Он определяет от остановить печать до здесь до начать печать после здесь. Для вашего примера данных - и позволяя остановить печать до здесь, который будет соответствовать любой из пустых строк или , что
вещь:
sed -e 'x;/^\( *<np>.*\)*$/,/^*\** *$/c\' -e '' <infile >outfile
x
sed
всегда на одну строку позади ввода - и первая строка всегда пустая. /^\( *.*\)*$/
. /^*\** *$/
*
звездочки и продолжается до конца строки с нулем или более вхождений *
звездочки и, возможно, закрывается любым количеством пробелов. c\' -e ''
c
переводит весь заблокированный выбор в одну пустую строку, сжимая все ненужные строки до строки EOF
. Таким образом, любое количество строк, встречающихся до ^*\** *$
и после первой следующей ^\( *
, всегда сжимается до единственной пустой строки, и только первый встречающийся параграф после совпадения для ^*\** *$
выводится в stdout. Печатается...
2012/10/01 00:00:00.000 6998.239 0.001233 97.95558 77.41733 89.98551 290.75808 359.93398 2012/10/01 00:05:00.000 6993.163 0.001168 97.95869 77.41920 124.72698 274.57362 359.93327 2012/10/01 00:10:00.000 6987.347 0.001004 97.96219 77.42327 170.94020 246.92395 359.94706 2012/10/01 00:15:00.000 6983.173 0.000893 97.96468 77.42930 224.76158 211.67042 359.97311
Это предполагает, что вы хотите обрабатывать любое количество вхождений шаблона параграфа во входных данных. Если вам нужен только первый, однако, при условии, что у вас есть GNU grep
и что infile
является обычным, lseekable файлом:
{ grep -xm1 '*\** *' >&2
sed -n '/^\( *<np>.*\)*$/q;p'
} <infile 2>/dev/null >outfile
... будет работать также.
И на самом деле, я полагаю, есть три способа. Третий может выглядеть так:
sed 'H;$!d;x;s/\(\n\*\** *\n\(\([0-9./: ]*\n\)*\)\)*./\2/g'
... который читает весь файл, а затем глобально заменяет каждый символ, который не попадает в спецификации совпадающих строк. Он печатает то же самое, что и раньше, но писать его очень тяжело, и он безопасен с точки зрения производительности, только если вы сбалансируете опции против любого символа.
Да, вы можете lvудалить LV1, не затрагивая данные в LV2. Вот почему они являются отдельными LV.
Перед созданием PV из VG следует убедиться, что PV сообщается как полностью свободный с помощью команды pvs
или pvdisplay
. Если нет, и у вас есть другие PV в VG со свободным местом, вы можете использовать команду pvmove
для перемещения данных из PV, который вы хотите удалить, в один (или более, если необходимо )PV, которые вы планируете оставить -, пока LV установлены и используются. (Это одна из вещей, которая делает LVM великолепным, когда вам нужно избежать простоев.)
Самый простой способ использовать pvmove
— просто указать имя PV, которое вы хотите сделать пустым. Он достаточно умен, чтобы просматривать другие PV в той же VG и находить свободное место для любых данных, которые необходимо переместить. Конечно, вы также можете указать целевой PV -или несколько целевых PV, если данные, которые вам нужно переместить, не помещаются ни в один PV, который вы хотите сохранить. pvmove
сначала будет перемещать данные из исходного PV в первый целевой PV до тех пор, пока это назначение не заполнится, а затем продолжит движение к следующему указанному целевому PV.
Как только PV полностью освободится,(pvs
сообщает PFree = PSize для него или pvdisplay <PV device name>
сообщает, что «Выделенный PE» = 0 ), вы можете vgreduce
освободить его из VG.
После этого вы можете удалить PV из системы. Если вы планируете повторно использовать диск без переразметки или иной перезаписи, вы можете использовать pvremove
для удаления заголовка LVM PV с диска, но любой другой способ сделать так, чтобы система больше не видела заголовок LVM PV, будет работать. точно также. (В этот момент все не -исторические метаданные LVM, относящиеся к этому PV, находятся в самом этом PV. Если этот раздел или диск исчезнет, LVM прекрасно поймет, что PV исчез.)
Если пространство из разделов на этих дисках используется lv2, это будет затронуто, когда вы vgreduce
и pvremove
.
Лучше всего сделать резервную копию данных, lvremove
обоих, vgreduce
, pvremove
, а затем заново создать физические тома и lv2, а затем восстановить данные.