cnless.sh:改进版less,可自动识别GBK编码或UTF-8编码。

#!/bin/bash

#功能:让GBK编码的文件可以使用less正常显示中文(自动识别GBK和UTF-8编码)

#v0.1 在LINUX下,使用UTF-8编码,less UTF-8的文件时显示中文正常,而less GBK的文件时将显示乱码,

#本脚本使用enca识别编码(enca识别编码的能力较弱,经常会有不识别的情况,对于这种情况,认为是GBK文件),如果是UTF-8编码,

#直接显示;如果是GBK编码,先转换成UTF-8编码,再显示。

#v0.2 增加对标准输入重定向的支持

#@todo 怎么让less保留原来颜色?



res=$(lsof -a -p $$ -d0 2>&1)

data=

if echo "$res" | grep -q "pipe" ; then

    data=$(cat -) #-表示标准输入

else

if [ $# -eq 0 ] ; then

    echo "usage:$0 <file>"

    exit 1

fi



if [ ! -e "$1" ] ; then

    echo "$1 not exists"

    exit 2

fi



if [ -d "$1" ] ; then

    echo "$1 is a directory"

    exit 3

fi

data=$(cat "$1")

fi



gbk=0

enc=$(echo "$data" | enca 2> /dev/null) #当文件不识别时,输出会写到stderr,重定向到/dev/null

#将不识别的文件也认为是GBK文件

if [ ! $? -eq 0 ] ; then

    gbk=1

elif echo $enc | grep -q GB ; then

    gbk=1

fi

# 转换文件

if [ $gbk -eq 1 ] ; then

    data=$(echo "$data" | iconv -f gbk -t utf-8)

    echo "$data" | less

else

    echo $data | less

fi

 

你可能感兴趣的:(utf-8)