SED изменяет окончательные окончания окон. Как я могу избежать этого?

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);
}

0
19.10.2018, 19:43
1 ответ

Да, (\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.

2
28.01.2020, 02:41

Теги

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