2017-02-20 17 views
0

Я пытаюсь перенаправить вывод isql (Sybase), и файл возвращает странные символы в конце строки ^@. Мне нужно удалить этот символ для полного файла. Я не могу использовать перенаправление вывода внутри запроса, потому что BBDD, который у меня есть, не реализовал эту функциональность.Как удалить символ "^ @" из файла?

пример:

Node:SNMP_ALU_FTTH:INACT:Rack_1_SubRack_1_Slot_5_PON_4_ONT_34^@;Network Fail^@;1487336303; 

Это происходит только тогда, когда я обращаю к файлу:

./script.pl > result.txt 

система инфо:

Linux XXXXXXX 2.6.18-194.el5 # 1 SMP Tue 16 марта 21:52:39 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux

Я попытался сделать «dos2unix» над файлом, но n othing изменено

+1

Что такое «BBDD»? –

+2

'^ @' - обычный способ отображения нулевого символа. –

+0

Как вы просматриваете файл? –

ответ

2

Как уже упоминалось в комментариях, этот символ является представлением нулевого символа, который на самом деле является непечатаемым символом.

Если вы повторяете нулевую разделенную строку или если у вас есть нулевой отдельный файл, вы ничего не увидите.

Чтобы ответить на ваш вопрос, вы можете удалить нулевые символы с помощью утилиты tr.

Например, используя tr '\0' '\n' <file (или <<<"$var") будет транслитерировать нулевые символы в новые строки.
Аналогично tr '\0' ' ' преобразует нулевые символы в пробелы и т.д.

Или вы можете использовать tr -d '\0' удалить нулевые символы.

Примечание:
Прежде чем начать играть с нулевым символом, присутствующим в вашей строке, убедитесь, что вы знаете, что вы делаете ... Обратите внимание, что многие программы способны обрабатывать нулевой символ в качестве разделителя полей ввода и некоторые другие программы могут фактически требовать, чтобы данные были разделены на нуль. Также ваша программа, которая генерирует эту нулевую строку, может быть настроена для предоставления данных на основе другого разделителя. Прочтите руководства.

Примечание 2:
Просто для записи, нулевые символы могут быть удалены с помощью СЭД: sed 's/\x00/ /g' file
Это будет также конвертировать нулевой символ (шестнадцатеричный код 00 = \ x00) в пространстве.
Sed можно комбинировать с переключателем -i, чтобы применить изменения на месте.

+0

Вы решаете мою проблему! На самом деле спасибо за объяснение :) –

0

Я не уверен, что вы делаете в скрипте. но с помощью команды ниже вы можете удалить «^ @» из файла.

sed -i -e "s/\^\@//g" result.txt 
+2

Неверно, что файл содержит буквенную последовательность ''^@ "'. –

+0

точно, эта команда не работает, потому что не является буквенным символом, это специальный разделитель (null char) –

 Смежные вопросы

  • Нет связанных вопросов^_^