Команда sed не работает для удаления специального символа (обозначения авторских прав и торговых марок)

Ваша проблема вызвана неправильным размером заголовка CIFS для SMBv2/3 (по какой-то причине, SMBv2 все равно работает )в ядре Linux.

Эта проблема была исправлена ​​в ядре версии 4.12.11 , но, поскольку это не поддерживаемый выпуск ядра, вы решаете установить его или нет на свой страх и риск.

Проверьте https://cdn.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.12.11, найдите коммит 9e37b1784f2be9397a903307574ee565bbadfd75.

Чтобы установить эту версию ядра (Я вижу, вы используете Ubuntu 16.04):

  1. Подключитесь к машине с Linux через SSH/из консоли/и т. д.
  2. Получите привилегии суперпользователя:

    судо -я
    компакт-диск /tmp/

  3. Убедитесь, что в каталоге /tmp/ нет других пакетов.deb:

    rm -f *.deb

  4. Загрузите пакеты ядра:

    wgethttp://kernel.ubuntu.com/~kernel-ppa/mainline/v4.12.11/linux-headers-4.12.11-041211_4.12.11-041211.201709070418_all.deb&& wgethttp://kernel.ubuntu.com/~kernel-ppa/mainline/v4.12.11/linux-headers-4.12.11-041211-generic_4.12.11-041211.201709070418_amd64.deb&& wgethttp://kernel.ubuntu.com/~kernel-ppa/mainline/v4.12.11/linux-image-4.12.11-041211-generic_4.12.11-041211.201709070418_amd64.deb

  5. Установите пакеты ядра:

    dpkg -Linux -*.deb

  6. Перезагрузите сервер, чтобы загрузить новое ядро.

1
18.02.2020, 23:32
2 ответа

Вы можете использовать неприятный трюк, чтобы выполнить эту работу, используя шестнадцатеричные коды. Например, в UTF -8 ascii по умолчанию вы можете напечатать 'с \x27, который является шестнадцатеричным кодом одинарных кавычек.

echo -e "\x27hello\x27"
'hello'

Символ авторского права не является частью таблицы ASCII по умолчанию, но относится к расширенным кодам ASCII. Вы также можете напечатать расширенные символы ascii в виде комбинации шестнадцатеричных кодов

.

(по рекомендацииhttp://www.fileformat.info/info/unicode/char/a9/index.htm)

echo -e '\xc2\xa9'
©

Точно так же вы можете использовать эти шестнадцатеричные коды в sed

a="hello ©"
sed 's/\xc2\xa9/??/' <<<"$a"  ##replacing copyright symbol with two questionmarks
hello ??

Если \xc2\xa9, что означает символ авторского права, не работает, вы можете попробовать \xe2\x92\xb8, который представляет собой «ЛАТИНСКУЮ ЗАГЛАВНУЮ БУКВУ C В КРУГЛЕ».

Также попробуйте\o251(использовать строчную букву 'o', а не ноль ).

0
28.04.2021, 23:23

Всем спасибо.

Я получил решение как на perl:

perl -lape 's/[^[:print:]]*//g'
0
28.04.2021, 23:23

Теги

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