Все файловые системы
используют часть общего пространства, доступного на устройстве, для хранения внутренних
структур и данных (метаданных файловой системы). Накладные расходы файловой системы XFS
составляют около 0,5%.
В то время как lvdisplay
сообщает фактический размер на диске, df
показывает используемое системой дисковое пространство, которое представляет собой фактический размер диска за вычетом накладных расходов файловой системы.
У вас есть параметр -i
, который редактирует файл на месте. Это могло помешать вам найти правильное решение.
Ваша проблема в том, что вы пытаетесь сопоставить пустую строку, что не позволяет sed
. Вместо этого сопоставьте любой символ и замените его тем же символом, за которым следует пробел. Это оставит вам пробел в конце каждой строки, который вы можете удалить с помощью другого sed.
$ cat input
1212103122
1233321212
0000022221
$ sed -e 's/./& /g' -e 's/ $//' input > output
$ cat output
1 2 1 2 1 0 3 1 2 2
1 2 3 3 3 2 1 2 1 2
0 0 0 0 0 2 2 2 2 1
$
Здесь параметр awk
:
awk -F '' '{$1=$1}1' input > output
Принцип работы:
, установив пустой разделитель полей -F ''
, мы разбиваем входные записи (строки) на отдельные символы
, оценивая $ 1 = $ 1
, мы заставляем запись быть перестроен с разделителем выходных полей по умолчанию (который представляет собой одиночный пробел)
1
истинно, поэтому распечатайте результат
Аналогичный трюк в perl:
perl -F'' -alne 'print join " ", @F' input > output
Для иллюстрации:
$ awk -F '' '{$1=$1}1' input
1 2 1 2 1 0 3 1 2 2
1 2 3 3 3 2 1 2 1 2
0 0 0 0 0 2 2 2 2 1
Вот вы:
sed 's/\(.\{1\}\)/\1 /g' input > output
И если вы хотите сохранить изменения на месте:
sed -i 's/\(.\{1\}\)/\1 /g' input
s / \ (. \ {1 \} \) / \ / g
добавит пробел после каждого 1 символа.
Например, если вам нужен выходной файл, например:
12 12 10 31 22
12 33 32 12 12
00 00 02 22 21
, вы можете отредактировать мой ответ на:
sed -i 's/\(.\{2\}\)/\1 /g'
Таким образом, он будет добавлять пробел после каждых 2 символов.
Кроме того, / \ 1 /
совпадает с / &
и добавляет одно пробел.
Например, чтобы добавить три: / \ 1 /
или / & /
. У вас есть еще много возможностей для использования. Сед - сверхмощный инструмент.
Вдобавок да, как упоминал @ Law29, это оставит пробел в конце каждой строки, если вы не удалите их, поэтому, чтобы удалить их при добавлении пробелов, вы можете добавить s / $ / /
до конца данного решения, для этого:
sed 's/./& /g; s/ $//'
Надеюсь, это может помочь.
У меня сработало:
sed 's/./& /g' input > output
$ cat input
1212103122
1233321212
0000022221
$ cat output
1 2 1 2 1 0 3 1 2 2
1 2 3 3 3 2 1 2 1 2
0 0 0 0 0 2 2 2 2 1