2016-11-23 2 views
-1

У меня есть файлы размером 10 МБ, которые имеют текст ASCII, но заканчиваются нулевыми символами. Я использую cat myfile | tr -d '\000' | less, чтобы удалить эти нулевые символы.trim null символ при открытии менее

Ищет способ сделать это автоматически через $LESSOPEN или lessopen.sh. Я попытался добавить в lessopen.sh:

if grep -q -Pa '\x00' $1; then 
      tr -d '\000' $1 
    fi 

И export LESSOPEN='| tr -d "\000" | lesspipe.sh %s'

Ни работы.

Любая помощь приветствуется. Благодаря

ответ

2

Почему бы не просто:

#!/bin/bash 
# lessopen.sh 
# Use: lesopen.sh FILE 

# Parameter must be a readable file 
[ ! -r "$1" ] && { echo "File '$1' doesn't exist or cannot be read!">&2; exit 1; } 

tr -d '\000' < "$1" | less 

EDIT

Если сценарий предназначен для использования для чтения и от stdin, то эта версия будет делать:

#!/bin/bash 
# lessopen.sh - deletes all null bytes (0x00) and executes less command with result 
# Use: 
# $ lessopen.sh FILE 
# $ lessopen.sh < FILE 
# $ cmd | lessopen.sh 

INPUT="$1" 
if [ -n "$INPUT" ];then 
    # Parameter must be a readable file 
    [ ! -r "$INPUT" ] && { echo "File '$INPUT' doesn't exist or cannot be read!">&2; exit 1; } 
    tr -d '\000' < "$INPUT" | less 
else 
    tr -d '\000' | less 
fi 
+0

Хорошо работает, когда я открываю файл, используя только меньше (например, 'less myfile'). Но не работает, когда я трачу его меньше (например, 'cat myfile | less') –

+1

Если вы имеете в виду' lessopen.sh myfile' и 'cat myfile | lessopen.sh', тогда скрипт должен быть готов читать из 'stdin', которого нет в моей начальной версии. См. Мой ответ, я изменил его, чтобы принять 'stdin' как вход. – WPomier

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

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