Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1434855
  • 博文数量: 350
  • 博客积分: 12557
  • 博客等级: 上将
  • 技术积分: 3621
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-22 07:33
文章分类

全部博文(350)

文章存档

2014年(2)

2013年(1)

2012年(15)

2011年(46)

2010年(61)

2009年(80)

2008年(80)

2007年(65)

分类: LINUX

2009-06-16 11:47:58

${expression}一共有9种使用方法。
${parameter:-word}
${parameter:=word}
${parameter:?word}
${parameter:+word}
上面4种可以用来进行缺省值的替换。
${#parameter}

上面这种可以获得字符串的长度。
${parameter%word} 最小限度从后面截取word
${parameter%%word} 最大限度从后面截取word
${parameter#word} 最小限度从前面截取word

${parameter##word} 最大限度从前面截取word

上面4个就是用来截取字符串的方法了。有了着四种用法就不必使用cut命令来截取字符串了。
在shell里面使用外部命令会降低shell的执行效率。特别是在循环的时候。

利用这个方法我简单的重写了以前用cut实现的cgi参数解析的shell

str=$QUERY_STRING
[ "${str%&}" = "$str" ] && str="$str&"
while [ -n "$str" ]; do
pair=${str%%&*}
var=${pair%=*}
val=${pair#*=}

str=${str#*&}

eval $(echo "PARM_$var"="$val")
done

  字符串的处理:
  1,截取
  方法一:
  echo $a|awk ’{print substr( ,1,8)}
  substr是awk中的一个子函数,对第一个参数的进行截取,从第一个字符开始,共截取8个字符,如果不够就从第二个字符中补充
  方法二
  echo $a|cut -b2-8
  cut:对标准输入的字符串进行处理
  cut -bn-m:以byte为单位,从第n个byte开始,取m个
  cut -bn,m:以byte为单位,截取第n,m个byte
  cut -b-n,m:以byte为单位,截取1-n,和第m个
  -c:以charactor为单位
  -d:指定分隔符,默认为tab
  -s:使标准输入中没有delimeter
  cut -f1:截取第1个域
  方法三
  a=123456
  echo $
  方法四
  使用sed截取字符串的最后两位
  echo $test |sed ’s/(.*)(..)$//
  截取字符串的前2位
  echo $test |sed ’s/^(..)(.*)//
  2,比较
  好像没有什么可以比较的
  3,连接
  $a$b
  或者
  $string
  4,翻转
  方法一:
  使用rev命令
  方法二:
  编写脚本实现
  #!/usr/bin/awk -f

  ################################################################

  # Description : duplicate rev in awk

  ################################################################

  {
  revline = ""
  for (i=1;i<=length;i++)
  {
  revline = substr(,i,1) revline
  }
  }
  END{print revline}
  5,匹配
  grep
  egrep
  fgrep
  6,排序
  7,替换
  bash中:
  %x=abcdabcd
  %echo $ # 只替换一个

  bbcdabcd
  %echo $ # 替换所有

  bbcdbbcd
  sh中:
  ??
  如何替换/
  使用sed
  替换所有匹配
  echo $test |sed ’s/xx/yy’
  替换单个匹配
  ??
  8,得到字符串的长度:
  bash当中
  $
  或者
  expr "$VAR" :.*
  9,判断字符串是否为数字
  10,得到字符串中某个字符的重复次数
  echo $a |tr "x" "n" |wc -l
  得到的结果需要减去1
  或者
  echo $a |awk -F"x"{print NF-1}
  11,得到字符串中某个string的重复次数
  12,将一批文件中的所有string替换
  for i in file_list
  do
  vi $i <<-!
  :g/xxxx/s//XXXX/g
  :wq

  done
  13,如何将字符串内每两个字符中间插入一个字符
  使用sed
  echo $test |sed ’s/../&[insert char]/g’

阅读(6473) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~