как вставить пробел между отдельными цифрами в файле?

Все файловые системы используют часть общего пространства, доступного на устройстве, для хранения внутренних структур и данных (метаданных файловой системы). Накладные расходы файловой системы XFS составляют около 0,5%.

В то время как lvdisplay сообщает фактический размер на диске, df показывает используемое системой дисковое пространство, которое представляет собой фактический размер диска за вычетом накладных расходов файловой системы.

5
10.08.2016, 01:01
4 ответа

У вас есть параметр -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
$ 
4
27.01.2020, 20:31

Здесь параметр 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
4
27.01.2020, 20:31

Вот вы:

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/ $//'

Надеюсь, это может помочь.

5
27.01.2020, 20:31

У меня сработало:

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 
9
27.01.2020, 20:31

Теги

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