Вот способ сделать это на чистом awk, используя getline
:
awk '
/% BEGIN/ {
s = 1;
}
s == 1 {
b = b == "" ? $0 : b ORS $0
}
/% END/ {
while ((getline repl < "foobar.txt") > 0) {
tmp = b;
sub(/foo bar/, repl, tmp);
print tmp;
}
b = "";
s = 0;
next;
}
s == 0 {
print;
}' input
С помощью GNU awk вы можете сделать замену без временного использования – используя gensub
:
gawk '
/% BEGIN/ {
s = 1;
}
s == 1 {
b = b == "" ? $0 : b ORS $0
}
/% END/ {
while ((getline repl < "foobar.txt") > 0) {
print gensub(/foo bar/, repl, 1, b);
}
b = "";
s = 0;
next;
}
s == 0 {
print;
}' input
Тестирование :
$ gawk '
> /% BEGIN/ {s = 1;}
> s == 1 {b = b == "" ? $0 : b ORS $0}
> /% END/ {while ((getline repl < "foobar.txt") > 0) {print gensub(/foo bar/, repl, 1, b);} s = 0; next;}
> s == 0 {print}' input
some text …
% BEGIN
blabla
2 3
blabla
blabla
% END
% BEGIN
blabla
8 9
blabla
blabla
% END
% BEGIN
blabla
1 2
blabla
blabla
% END
some text …
Следующее делает некоторые предположения:
Итак, начнем.
fdisk -l
fdisk / dev / (newdisk)
Сделайте раздел основным разделом с типом файловой системы типа «83».
mkfs.ext4 / dev / (новый раздел)
mkdir / mnt / (newpartitionmountpoint)
mount / dev / (newpartition) / mnt / (newpartitionmountpoint)
/ sbin / init 1 (переход в однопользовательский режим)
rsync -avxHAX / / mnt / (newpartitionmountpoint)
startx
blkid (обратите внимание на UUID нового раздел)
(выбранный редактор) / mnt / (newpartitionmountpoint) / etc / fstab
Заменить существующий UUID / в FSTAB на UUID нового диска
grub-mkconfig
update-grub
grub-install / dev / (newdisk)
cp -ax /boot/grub/grub.cfg /mnt/(newpartitionmountpoint)/boot/grub/grub.cfg
(редактор по выбору) /mnt/(newpartitionmountpoint)/boot/grub/grub.cfg
Замените все старые UUID на UUID нового диска
Завершение работы
Физически переместите новый диск в расположение 1-го диска и удалите старый диск
14. Запустите компьютер, и grub должен представить:
ошибка: такого устройства нет: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Спасение GRUB>
ls [для определения вашего диска и параметров раздела]
ls (hdx, p) / [чтобы определить, в каком разделе находится папка / boot]
set prefix = "(hdx, p) / boot / grub"
set root = "(hdx, p)"
insmod normal
normal
fdisk -l (обратите внимание на разработчика newdisk)
grub-mkconfig
update-grub
grub-install / dev / newdisk
И все готово!