zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Educational Codeforces Round 6
    Codeforces Round #373 (Div. 2)
    尺取法
    Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 2)
    逆元(数论倒数)
    最大公约数gcd,最小公倍数lcm,扩展欧几里得
    hdu 6395 Sequence (分段矩阵快速幂)
    快速幂
    hdu 6432 Cyclic
    hdu 6397 charactor encoding
  • 原文地址:https://www.cnblogs.com/pheye/p/3754605.html
Copyright © 2011-2022 走看看