在less中打开时修剪null字符

时间:2016-11-23 13:16:19

标签: bash pipe

我有一个10MB的文件,有ASCII文本,但以空字符结尾。 我使用cat myfile | tr -d '\000' | less来删除那些空字符。

寻找通过$LESSOPENlessopen.sh自动执行此操作的方法。 我尝试添加lessopen.sh

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

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

都没有效果。

感谢任何帮助。 感谢

1 个答案:

答案 0 :(得分: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

修改

如果该脚本也用于从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