2016-11-23 26 views
-1

我有一個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'

無論是作品。

任何幫助表示讚賞。 感謝

回答

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 
+0

當我使用較少的文件(例如'less myfile')打開文件時效果很好。但是,當我通過較少的管道傳輸時不起作用(例如'cat myfile | less') –

+1

如果您的意思是'lessopen.sh myfile'和'cat myfile | lessopen.sh',那麼腳本必須準備從'stdin'中讀取,而我的初始版本不是。看到我的回答,我改變它接受'stdin'作爲輸入。 – WPomier