Вставить символы новой строки с помощью sed?

Итак, у вас есть физическое устройство /dev/vda размером 751619276800 и два раздела размерами: 750543241216 и 1073741824. Нераспределено всего 2293760 байт (2 МБ).

Неправда, что размер вашего раздела намного меньше доступного места: ваш раздел имеет максимальный размер, который он может иметь, и у вас есть свободное место на этом разделе. Если вы хотите иметь больше разделов, вы должны сжать /dev/vda1 и создать еще один раздел, но я бы этого не сделал.

Если вы хотите изменить размер разделов в существующей системе, вам следует использовать LVM.

РЕДАКТИРОВАТЬ:
Согласно справке btrfs:

файловая система btrfs df 
Показать информацию об использовании пространства для точки монтирования
файловая система btrfs show [options] [|||метка]
Показать структуру файловой системы

Как видите, btrfs fi showутверждает, что /dev/vda1 имеет размер 699, а используется 576. Если вы просуммируете данные, систему и метаданные в общем , это даст вам 576.

См. эту ссылку для справки.

0
27.08.2017, 14:33
2 ответа

Вы можете с помощью GNU sed:

 $ sed -r 's/(GSM[0-9]{5})(AATF)/\1\n\2/' file.in >file.out

Шаблон соответствует первой части, а затем второй части в двух отдельных группах захвата. Я предположил, что первой частью всегда будет GSM, за которой следуют пять цифр. Замена просто вставляет захваченные данные из двух групп с новой строкой между ними.

-rнеобходим, потому что я использовал расширенное регулярное выражение. Некоторые реализации sedиспользуют -Eвместо -rдля таких регулярных выражений.

В системах без GNU sed:

$ sed 's/\(GSM[0-9]\{5\}\)\(AATF\)/\1\
> \2' file.in >file.out

То есть используйте BRE вместо ERE (и удалите расширение -rGNU), просто добавьте \и нажмите return после \1и продолжите шаблон замены на следующей строке. >— это подсказка, а не то, что вы вводите.

2
28.01.2020, 02:33

Это работает на моем Mac и различных дистрибутивах Linux:

#!/usr/bin/env bash

PATTERN="(GSM[0-9]{5})(AATF)"

sed -E -e $"s_${PATTERN}_\1\\
\2_g" < file_with_values

Где:

  • PATTERN:вы можете определить шаблон в переменной, что упрощает чтение выражения подстановки
  • sed -E -e:установите sedдля использования расширенного регулярного выражения (-E )и для использования предоставленного скрипта (-e)
  • $"...":используется для перевода строк и допускает использование переменных. Посмотрите здесь:bash, цитирующий . Это может быть безопасно не во всех ситуациях, но в вашем случае все должно быть в порядке
  • s_..._...\2_g:— строка замены; Я использую _в качестве разделителей, так что вам не нужно экранировать /и, учитывая, что вам нужны группы захвата(\1и \2), это просто облегчает чтение строки. Обратите внимание на \\, за которым следует новая строка. $"..."позволяет использовать новые строки

Если вам не нужны переменные, вы можете использовать $'....', то есть знак доллара в одинарных кавычках. В этом случае вы можете использовать \n, но не можете вставить новую строку

.

Использование $"..."кажется вполне переносимым :мой код с похожей реализацией работает на docker alpine, centos, debian, fedora, ubuntu.

0
28.01.2020, 02:33

Теги

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