Prayer

在一般中寻求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

shell字符串处理

Posted on 2008-08-12 22:07 Prayer 阅读(716) 评论(0)  编辑 收藏 引用 所属分类: Shell
  1. 构造字符串
    直接构造
    STR_ZERO=hello
    STR_FIRST="i am a string"
    STR_SECOND='success'

    重复多次
    #repeat the first parm($1) by $2 times
    strRepeat()
    {
    local x=$2
    if [ "$x" == "" ]; then
    x=0
    fi

    local STR_TEMP=""
    while [ $x -ge 1 ];
    do
    STR_TEMP=`printf "%s%s" "$STR_TEMP" "$1"`
    x=`expr $x - 1`
    done
    echo $STR_TEMP
    }

    举例:
    STR_REPEAT=`strRepeat "$USER_NAME" 3`
    echo "repeat = $STR_REPEAT"

  2. 赋值与拷贝
    直接赋值
    与构造字符串一样
    USER_NAME=terry

    从变量赋值
    ALIASE_NAME=$USER_NAME


  3. 联接
    直接联接两个字符串
    STR_TEMP=`printf "%s%s" "$STR_ZERO" "$USER_NAME"`
    使用printf可以进行更复杂的联接

  4. 求长
    求字符数(char)
    COUNT_CHAR=`echo "$STR_FIRST" | wc -m`
    echo $COUNT_CHAR

    求字节数(byte)
    COUNT_BYTE=`echo "$STR_FIRST" | wc -c`
    echo $COUNT_BYTE

    求字数(word)
    COUNT_WORD=`echo "$STR_FIRST" | wc -w`
    echo $COUNT_WORD

  5. 比较
    相等比较
    str1 = str2

    不等比较
    str1 != str2

    举例:
    if [ "$USER_NAME" = "terry" ]; then
    echo "I am terry"
    fi

    小于比较
    # return 0 if the two string is equal, return 1 if $1 < $2, else 2 strCompare() { local x=0 if [ "$1" != "$2" ]; then x=2 local TEMP=`printf "%s\n%s" "$1" "$2"` local TEMP2=`(echo "$1"; echo "$2") | sort` if [ "$TEMP" = "$TEMP2" ]; then x=1 fi fi echo $x }
  6. 测试
    判空
    -z str

    判非空
    -n str

    是否为数字
    # return 0 if the string is num, otherwise 1
    strIsNum()
    {
    local RET=1
    if [ -n "$1" ]; then
    local STR_TEMP=`echo "$1" | sed 's/[0-9]//g'`
    if [ -z "$STR_TEMP" ]; then
    RET=0
    fi
    fi
    echo $RET
    }

    举例:
    if [ -n "$USER_NAME" ]; then
    echo "my name is NOT empty"
    fi

    echo `strIsNum "9980"`


  7. 分割
    以符号+为准,将字符分割为左右两部分
    使用sed
    举例:
    命令 date --rfc-3339 seconds 的输出为
    2007-04-14 15:09:47+08:00
    取其+左边的部分
    date --rfc-3339 seconds | sed 's/+[0-9][0-9]:[0-9][0-9]//g'
    输出为
    2007-04-14 15:09:47
    取+右边的部分
    date --rfc-3339 seconds | sed 's/.*+//g'
    输出为
    08:00

    以空格为分割符的字符串分割
    使用awk
    举例:
    STR_FRUIT="Banana 0.89 100"
    取第3字段
    echo $STR_FRUIT | awk '{ print $3; }'

  8. 子字符串
    字符串1是否为字符串2的子字符串
    # return 0 is $1 is substring of $2, otherwise 1
    strIsSubstring()
    {
    local x=1
    case "$2" in
    *$1*) x=0;;
    esac
    echo $x
    }

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理