发新话题
打印

shell字符串处理

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
      }

转自: http://hi.baidu.com/door17/blog/ ... 6ed7f23b87ce2c.html

TOP

发新话题