Удаление терминального специального символа `^@`

Когда я less файл, это выглядит так.

^@00002201-271f-43b9-81a7-000b0a31abe5
^@00004695-2281-44df-b18d-bd68b63fced4
^@00009273-3a0f-4c2e-b708-805e02147f55
^@0000a0e6-3889-43f2-9635-63e114c38f29
^@0000a386-cf2f-4459-bd63-e83fb144013c

Проблема в ^@, когда cat этот файл, этот символ не виден.

Что это за персонаж? И как я могу обрезать это (в C или же awk без разницы)?

1 ответ

Решение

^@ представляет нулевой (0x00) байт. (The ^x сокращение от Ctrlx, которое на терминалах очищает два старших бита нажатой клавиши; так что пока A является 0x41 [0100'0001]Ctrl+A будет вводить 0x01 [0000'0001], и так далее.)

Чтобы снять его, проложите через sed 's/^\x00//', или же sed 's/\x00//g' если это происходит в других местах.

Однако NULL обычно просто игнорируется. Если первый символ обрезается, то у вас, вероятно, есть что-то большее, чем это в файле. Посмотрите на его hexdump, например, с xxd, hexdump -C, cat -v, или же sed -n l,

Другие вопросы по тегам