Удалить ненужный символ ~ G

Добавить вызов оболочки

sh -c "watch date > date.txt"

Для большего количества уровней добавьте больше оболочек вокруг

.
3
07.06.2018, 15:56
3 ответа

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 .

11
27.01.2020, 21:09

El ~Ges 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 sedes usar sustitución de caparazón:

sed -i 's/'`echo "\007"`'//' file_in

Cuando utilice cat, agregue la opción -epara mostrar caracteres que no sean de impresión -.

0
27.01.2020, 21:09

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 
2
27.01.2020, 21:09

Теги

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