Что делает sed $'s/[^[:print:]\t]//g'?

Клиенты с контрактами на поддержку Oracle могут получить версию squid, скомпилированную с отключенным флагом -march=nativeв Solaris 11.3 SRU 17 (11.3.17.5.0 )из репозитория /support. Сюда входят исправления для:

  • Ошибка 22051233 -squid сразу падает на процессор AMD
  • Ошибка 22380085 -Squid Недопустимая инструкция возникает при выполнении внутри виртуальной машины
1
30.07.2018, 11:30
1 ответ

Команда sedудаляет любой непечатаемый символ и табуляцию из содержимого каждой строки ввода. Количество строк не изменится (символы новой строки не удаляются, поскольку они не являются частью содержимого строки ), но может измениться количество символов или байтов. Проверьте еще раз с wc -cдля количества байтов, wc -mдля количества символов.

Регулярное выражение [^...]соответствует любому одиночному символу (, фактически сопоставляющему элемент ), а не в [...]. В данном случае это класс символов [:print:]и символ табуляции. $в начале строки заставляет bashзаменить \tбуквальным символом табуляции перед вызовом sed.

Класс символов [:print:]соответствует символам, которые могут быть напечатаны в текущей локали, то есть буквенно-цифровым символам, знакам препинания и пробелу (, но не табуляции, которая является управляющим символом ).

Другими словами, он удаляет все, что не является буквенно-цифровым символом, знаком пунктуации, пробелом или табуляцией.

Чтобы записать результат обратно в файл ("в -отредактировать место" ), некоторые sedреализации имеют для этого опцию -i; используйте sed -iили sed -i ''в зависимости от реализации. Убедитесь, что сначала создается правильный вывод, иначе вы можете уничтожить свои данные.

8
27.01.2020, 23:12

Теги

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