sed 's/ [ ]* / /g'
\_/ | \____/ | |
| | | | \- g=globally (not just one occurence)
| | | |
| | | \- to
| | |
| | \- from
| |
| \- s=substitute
|
\- program sed
От части:
/ [ ]* /
| \_/|
| | \- repeated 0-infinite times
| |
| \- group of characters
|
\- boundary
Включая *, существует 3 квантора:
Они обычно только обращаются к последнему знаку, таким образом, x* соответствует x, xxxx и ничему. x? соответствия 0 или 1 x, + соответствует x, xx, xxx и так далее. Но это может соответствовать группе символов как [aeiou] + или комбинация, инкапсулировавшая в parens: (нечто) *. Первые соответствия iiaiaei, второе нечто и foofoo.
Группа может быть перечислением [aeiou] или от - для группировки: [a-z] или комбинация: [0-9a-fA-F:]. Если Вам нравится включать минус в группу, необходимо поместить ее в конец или начало: [-:].
Наиболее используемая команда, вероятно', для замены. Другие являются 'd' для, удаляют и 'p' для печати.
Шаблоны инкапсулируются между разделителями, обычно режут.
sed 's/foo/bar/'
Строка работ Sed ориентирована. Если Вам нравится заменять один (первое), нечто с панелью, выше команды хорошо. Для замены всех Вам нужен 'g' для глобально.
sed 's/foo/bar/g'
Другие способы работать с sed вызывают номера строки:
sed -n '1,5p' file
- n не распечатает по умолчанию, 1,5p средства: печать от строки 1 - 5.
sed '6,$d' file
Это эквивалентно. Это удалит из строки 6 для окончания.
sed '5q' file
снова то же: выход после строки 5.
Обычно для sed, который команды более легки записать, чем читать.
Я думаю parted
только принимает абсолютные понятия, нет x+y
.
Вы могли сделать это как это: (+
интерпретируемый оболочкой)
# start=1
# size=512
# parted /dev/loop0 unit mib mkpart primary $start $(($start+$size))
# parted /dev/loop0 unit mib print free
Model: Loopback device (loopback)
Disk /dev/loop0: 1000MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
0.02MiB 1.00MiB 0.98MiB Free Space
1 1.00MiB 513MiB 512MiB primary
513MiB 1000MiB 487MiB Free Space
... и если Вы хотите добавить больше, затем
# start=$(($start+$size+1))
# size=128
# parted /dev/loop0 unit mib mkpart primary $start $(($start+$size))
# parted /dev/loop0 unit mib print free
Model: Loopback device (loopback)
Disk /dev/loop0: 1000MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
0.02MiB 1.00MiB 0.98MiB Free Space
1 1.00MiB 513MiB 512MiB primary
513MiB 514MiB 1.00MiB Free Space
2 514MiB 642MiB 128MiB primary
642MiB 1000MiB 358MiB Free Space
+1
является совершенно дополнительным, я точно так же, как отъезд свободных "бамперов" на 1 МиБ между разделами, по некоторым причинам.
Если Вы хотите иметь дело с процентами, можно получить размер устройства из оболочки также, с помощью blockdev --getsize64 /dev/device
, таким образом, можно переместить всю математику из разделенного на сценарий оболочки. Я делаю это для гарантии выровненных мебибайт разделов, поскольку я никогда не слишком уверен в какой parted
средства точно -a optimal
.