LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 5696|回复: 2

BASH中字符串的处理[转]

[复制链接]
发表于 2003-11-30 18:17:54 | 显示全部楼层 |阅读模式
来自: www.chinaunix.net
特此感谢作者: CharlesWang2

得到长度:
  1. %x="abcd"
  2. #方法一
  3. %expr length $x
  4. 4
  5. # 方法二
  6. %echo ${#x}
  7. 4
  8. # 方法三
  9. %expr "$x" : ".*"
  10. 4
  11. # expr 的帮助
  12. # STRING : REGEXP   anchored pattern match of REGEXP in STRING
复制代码

查找子串:
  1. %expr index  $x "b"
  2. 2
  3. %expr index  $x "a"
  4. 1
  5. %expr index  $x "b"
  6. 2
  7. %expr index  $x "c"
  8. 3
  9. %expr index  $x "d"
  10. 4
复制代码

得到子字符串:
  1. # 方法一
  2. # expr <string> startpos length
  3. %expr substr "$x" 1 3
  4. abc
  5. %expr substr "$x" 1 5
  6. abcd
  7. %expr substr "$x" 2 5
  8. bcd
  9. # 方法二
  10. # ${x:pos:lenght}
  11. %echo ${x:1}
  12. bcd
  13. %echo ${x:2}
  14. cd
  15. %echo ${x:0}
  16. abcd
  17. %echo ${x:0:2}
  18. ab
  19. %pos=1
  20. %len=2
  21. %echo ${x:$pos:$len}
  22. bc
复制代码

匹配正则表达式:
  1. # 打印匹配长度
  2. %expr match $x "."
  3. 1
  4. %expr match $x "abc"
  5. 3
  6. %expr match $x "bc"
  7. 0
复制代码

字符串的掐头去尾:
  1. %x=aabbaarealwwvvww
  2. %echo "${x%w*w}"
  3. aabbaarealwwvv
  4. %echo "${x%%w*w}"
  5. aabbaareal
  6. %echo "${x##a*a}"
  7. lwwvvww
  8. %echo "${x#a*a}"
  9. bbaarealwwvvww
  10. 其中 , # 表示掐头, 因为键盘上 # 在 $ 的左面。
  11. 其中 , % 表示%, 因为键盘上 % 在 $ 的右面。
  12. 单个的表示最小匹配,双个表示最大匹配。
  13. 也就是说,当匹配的有多种方案的时候,选择匹配的最大长度还是最小长度。
复制代码
字符串的替换;
  1. %x=abcdabcd
  2. %echo ${x/a/b} # 只替换一个
  3. bbcdabcd
  4. %echo ${x//a/b} # 替换所有
  5. bbcdbbcd
复制代码
不可以使用 regexp , 只能用 * ? 的文件扩展方式。
发表于 2004-9-11 21:45:27 | 显示全部楼层
顶!很有用的东西
发表于 2007-12-20 13:53:29 | 显示全部楼层
# 方法二
%echo ${#x}
4
# 方法三
%expr "$x" : ".*"

这两个不是很明白。会的给讲一下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表