Что происходит когда я кошка нетекстовый файл?

[1180898] Если ваша версия grep поддерживает PCRE (Perl Compatible Regular Expressions), вы можете использовать возможности Perl lookbehind и lookahead

  1. или с помощью [1181206]pcregrep[1181207] (если доступно)
  2. Имейте в виду, что если ваш паттерн действительно разбит по линиям, тогда возвращаемый текст сохранит новую строку - перед использованием результата его можно удалить с помощью [1181208]tr[1181209] или [1181210]sed[1181211].
  3. Если сам текст нельзя разделить на строки (только маркеры [1181212]\HF[1181213] и [1181214]\[1181215]), то можно заменить [1181216](.|\n)+?[1181217] на более простой [1181218].+?[1181219], то есть.

Если даже маркер [1181220]\HF=[1181221] может быть разбит в любой точке на новую строку (как указано в вашем комментарии к первоначальному посту), то требуется несколько иной подход, так как PCRE в настоящее время не поддерживает lookbehinds переменной длины. В этом случае вы можете попробовать

, где lookbehind заменяется псевдо-якорным выражением, используя [1181222] \K

1
11.03.2015, 01:45
2 ответа

Большая часть данных в не текстовом файле не может быть представлена ​​с использованием символов из любого из доступных наборов символов. Когда эти данные обрабатываются кошкой и показаны на экране, он отображается как ��� или другие бессмысленные символы, так как их нет другого способа отображения.

3
27.01.2020, 23:17

На самом деле � не "бессмысленный персонаж". Это символ замены Unicode . Он отображается в терминале с использованием кодировки UTF-8 при попытке отобразить байт, который не является допустимым кодом UTF-8. Он может отображаться (но с меньшей вероятностью), если шрифты, доступные для терминала, не предоставляют конкретное допустимое значение Unicode, но в этом случае более вероятно, что отображается пустой .

Обычно можно распечатать коды 32–126 (US-ASCII, переносимый набор символов POSIX). Коды 160–255 можно распечатать в кодировке ISO-8859-1, но не как UTF-8, потому что они могут быть одним из двух или более байтов, составляющих значение Unicode в кодировке UTF-8. Точно так же коды 128-159 являются управляющими символами в ISO-8859-1 (и непечатаемыми), но в UTF-8 это один из двух или более байтов и т. Д.

Если вы cat нетекстовый файл, вероятно, он будет содержать байты из диапазона 128–255, и они вряд ли будут формировать допустимые значения UTF-8. Так что вы увидите �.

Дополнительная литература:

2
27.01.2020, 23:17

Теги

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