Добавить вызов оболочки
sh -c "watch date > date.txt"
Для большего количества уровней добавьте больше оболочек вокруг
.cat -e
рендеринг их как M-^G
предполагает, что они имеют размер 0x87 байт (0207 в восьмеричном ). Как говорится в документации 1 , vim
отображает байт 0x87 как ~G
, когда в локалях используются однобайтовые кодировки -или когда encoding
является Unicode, а символ ESA закодирован как допустимый UTF. -8 многобайтовая последовательность, и отображает байт как <87>
, когда параметр encoding
имеет значение Unicode и символ не является частью действительной последовательности UTF -8. (Он отображает ^G
для 0x7, символа ASCII BEL.)
ЭтоG
(0x47 в ASCII )с битом 7 (meta ), установленным в 1, и битом 6, установленным в 0 (control ). Этот байт не является допустимым символом в UTF -8 и обычно является кодом управляющего символа(ESA
)в наборе C1 в кодировках ISO8859 -x.
Чтобы избавиться от него, вы можете сделать:
tr -d '\207' < file > file.new
С GNU sed
и оболочкой типа ksh93/zsh/bash с поддержкой$'...'
:
sed -i $'s/\207//g' file
Ваш
sed 's/[^ -~]//g'
сделал бы это, но только в локали C. Какие диапазоны символов совпадают в других локалях, довольно случайны. Так:
LC_ALL=C sed 's/[^ -~]//g' < file > file.new
(обратите внимание, что будут удалены все другие управляющие символы, включая табуляцию и CR (, но не LF )и не -символы ASCII ).
0x87 — это ‡ в наборе символов Windows -1252 (, который иногда неправильно называют latin1 или iso8859 -1 ).
Если вы хотите, чтобы эти 0x87 были преобразованы в ‡ (, потому что, например, эти файлы происходят из мира Windows, и это то, что эти 0x87 должны были быть )в кодировке вашей локали (, предполагая, что она имеет такой символ ), вы можете использовать:
iconv -f windows-1252 < file > file.new
1 Брэм Муленаар (2011 -03 -22 ). 'испринт' . "опции". Справочное руководство по VIM .
El ~G
es un carácter de campana que es ASCII 007. Una forma fácil de eliminarlo y actualizar su archivo es:
perl -pi -e 's/\007//' file_in
Véase también la tabla ASCII
Una solución más enrevesada sed
es usar sustitución de caparazón:
sed -i 's/'`echo "\007"`'//' file_in
Cuando utilice cat
, agregue la opción -e
para mostrar caracteres que no sean de impresión -.
Uso de herramientas de coreutils únicamente:
# Generate a test file
printf 'head\207\nsome text\207\nnew line' > /tmp/test.cchar
# And filter with tr
tr -d "\207" < /tmp/test.cchar > /tmp/test.filtered