Если вам нужно заполнение нулевым байтом, вы можете использовать head
как с фактическими файлами, так и с /dev/zero
(чтобы получить заполнение). Сначала настройте несколько тестовых файлов:
pax> echo -n 1 >a.txt ; echo -n 12 >b.txt ; echo -n 1234 >c.txt
Тогда следующий код даст вам то, что вы хотите.
pax> ( head -c1 a.txt ; head -c3 /dev/zero ;
head -c2 b.txt ; head -c2 /dev/zero ;
head -c4 c.txt ) | od -xcb
0000000 0031 0000 3231 0000 3231 3433
1 \0 \0 \0 1 2 \0 \0 1 2 3 4
061 000 000 000 061 062 000 000 061 062 063 064
0000014
Вы можете видеть, что заполнение помещено в выходной поток. Таким образом, скрипт для этого так же просто, как:
( head -c1 a.txt ; head -c3 /dev/zero ) >d.txt
( head -c2 b.txt ; head -c2 /dev/zero ) >>d.txt
( head -c4 c.txt ) >>d.txt
Или, если вы на самом деле не заботитесь о том, что входит в область заполнения, вы можете использовать однострочную строку, например:
cat [abc].txt | sed 's/^\(.\)\(..\)/\1___\2__/' >d.txt
Будет создан файл, содержащий:
1___12__1234