Какой-то монстр) С perl должно быть проще
cat file
ba bla bla hyphe-</page>
<page>nated bla bla bla
and the output should look like
bla bla bla</page>
<page>hyphenated bla bla bla
Это GNU sed (в некоторых других sed-s опция -E используется для расширенных регулярных выражений)
sed -nr '/[[:alpha:]]+-<\/[[:alpha:]]+>$/{
N
s!([[:alpha:]]+)-(</[[:alpha:]]+>)\n(<[[:alpha:]]+>)([[:alpha:]]+)!\2\n\3\1\4!}
p' file
ba bla bla </page>
<page>hyphenated bla bla bla
and the output should look like
bla bla bla</page>
<page>hyphenated bla bla bla
По состоянию на 2017 год qemu не обеспечивает эмуляцию графической карты только в текстовом режиме для x86-64, которая заставляла бы гостя оставаться в текстовом режиме.
Текущие дистрибутивы, такие как Fedora 25, поставляются с модулем ядра bochs_drm
, который по умолчанию включает буфер кадра (например, графический режим 1024x768). В отличие от этого, например, Debian 8 (стабильный) не предоставляет этот модуль, и поэтому он остается в текстовом режиме старой школы во время полной загрузки.
Таким образом, при запуске qemu с терминала (например, с -display curses
) имеет смысл включить последовательную консоль как отказоустойчивую:
console=tty0 console=ttyS0
или
console=tty0 console=ttyS0,115200
(параметры ядра для гостя, скорость по умолчанию 9600, обе настройки работают с qemu, сделайте настройки постоянными в Fedora, назначив их GRUB_CMDLINE_LINUX
в / etc / sysconfig / grub
и выполнив grub2-mkconfig - o /etc/grub2.cfg
или grub2-mkconfig -o /etc/grub2-efi.cfg
)
Если ничего не работает, можно переключиться внутри qemu с помощью Alt + 3 на тогда последовательную консоль.
Вторая мера заключается в отключении фреймбуфера с помощью параметра модуля bochs_drm
, то есть путем установки его в командной строке гостевого ядра:
bochs_drm.fbdev=off
В качестве альтернативы bochs_drm
может быть занесен в черный список - т.е. путем создания конфигурации в /etc/modprobe.d
- скажем - bochs.conf
:
blacklist bochs_drm
Поскольку initramfs не должен загружать также модуль bochs_drm, необходимо убедиться, что этот конфиг включен в initramfs. В дистрибутивах типа Fedora это достигается с помощью:
# dracut -f
При загрузке qemu с прошивкой UEFI (например, -bios /usr/share/edk2/ovmf/OVMF_CODE.fd
) отключение bochs fbdev недостаточно. Затем загрузка Fedora зависает при попытке переключиться на фреймбуфер bochs. Внесение bochs_drm в черный список исправляет это, но этого недостаточно. Можно просто получить графический режим 640 x 480, который не сбрасывается ядром в текстовый режим. Таким образом, для гостей UEFI необходимо выбрать путь через последовательную консоль.
Использование последовательной консоли в сочетании с -display curses
приводит к неоптимальному взаимодействию с пользователем, поскольку curses мешает эмуляции терминала vt110 / vt220. Таким образом, этого достаточно только в экстренных случаях.
Лучшее решение - полностью выключить дисплей и использовать комбинированный режим Qemu последовательного порта и монитора:
-display none -serial mon:stdio -echr 2
(где Ctrl + b h отображает справку и Ctrl + b c переключает режимы)
В Fedora 27 Grub2 по умолчанию настроен с поддержкой последовательной консоли. Таким образом, им можно управлять и через последовательный терминал.
Вызов resize
после входа в систему обновляет геометрию терминала, таким образом, результирующий терминал ведет себя так же хорошо, как и локальный.
В случае, если гостевой образ имеет графический установщик диспетчера входа, имеет смысл отключить его :
# systemctl set-default multi-user.target
В противном случае он должен переключаться на первую виртуальную консоль после каждого загрузка (например, Alt + 2 или Alt + 3 при использовании дисплея curses).