head
закрывает stdin после печати 10 строк. Затем dmesg
обнаруживает, что stdout закрыт, и завершает работу.
Если быть более точным, dmesg
получит сообщение об ошибке EPIPE
из-за вызова write
к stdout .
Из исходного кода dmesg.c здесь: https://github.com/karelzak/util-linux/blob/v2.27.1/sys-utils/dmesg.c#L654 -L659
rc = fwrite(p, 1, len, out) != len;
if (rc != 0) {
if (errno != EPIPE)
err(EXIT_FAILURE, _("write failed"));
exit(EXIT_SUCCESS);
}
Да, (\r = ^M = 0x0D )символ принадлежит к space
«классу символов». Разрешите это во втором регулярном выражении либо с помощью подстановочного знака:
sed -i.bak -E 's/[ \t]+.$/\r/' myfile
или конкретный символ, например
sed -i.bak -E 's/[ \t]+\r$/\r/' myfile
Если ваш sed
не распознает обозначение \r
, попробуйте другое. например шестнадцатеричный \x0D
или восьмеричный \015
.