正则表达式 不懂的话,想学的话,鸟哥Linux私房菜讲了,百度:鸟哥Linux私房菜。进入鸟哥的这个网站,通常是第一个。很容易找到。正则表达式
此文转载,原文更繁杂,此处为摘抄及修改小程序
Shell的字符串处理bash
此处字符串为”abcd“jsp
x="abcd"
#方法一
expr length $x
4
# 方法二
echo ${#x}
4
# 方法三
expr "$x" : ".*"
4
# expr 的帮助
# STRING : REGEXP anchored pattern match of REGEXP in STRINGide
expr index $x "b"
2
expr index $x "a"
1
expr index $x "b"
2
expr index $x "c"
3
expr index $x "d"
4网站
# 方法一,返回从startpos开始的,长length的子字符串
# expr <string> startpos length
expr substr "$x" 1 3
abc
expr substr "$x" 1 5
abcd
expr substr "$x" 2 5
bcdspa
# 方法二,长度为空的,返回到结尾
# ${x:pos:lenght}
echo ${x:1}
bcd
echo ${x:2}
cd
echo ${x:0}
abcd
echo ${x:0:2}
ab
pos=1
len=2
echo ${x:$pos:$len}
bcregexp
# 方法三字符串
%echo $x | cut -c 1-3get
abc
附:
小程序
#!/bin/bash
echo 请输入两个非负整数,而后回车输入一条字符串
echo n m
echo “str”
expr substr “$str” $n $m
expr match $x "."
1
expr match $x "abc"
3
expr match $x "bc"
0
expr "2009/08/10" : "[0-9]\{4\}/[0-9]\{2\}/[0-9]\{2\}$"
10
x=aabbaarealwwvvww
去尾,中间不隔其余字符
echo "${x%w*w}"
aabbaarealwwvv
中间有其余字符
echo "${x%%w*w}"
aabbaareal
去头,原理与尾相似
echo "${x##a*a}"
lwwvvww
echo "${x#a*a}"
bbaarealwwvvww
其中 , # 表示掐头, 由于键盘上 # 在 $ 的左面。
其中 , % 表示%, 由于键盘上 % 在 $ 的右面。
单个的表示最小匹配,双个表示最大匹配。
也就是说,当匹配的有多种方案的时候,选择匹配的最大长度仍是最小长度。
x=abcdabcd
echo ${x/a/b} # 只替换一个
bbcdabcd
echo ${x//a/b} # 替换全部
bbcdbbcd
不可使用 regexp , 只能用 * ? 的文件扩展方式。
x=abcd
printf "%30s\n" $x
右边补空格
printf "%-30s\n" $x
左边补空格
字符有多是数字、字母、空格、其余特殊字符,而字符串有多是它们任何一种或者多种的组合,在组合以后还可能造成一个具备特定意义的字符串,诸如邮件地址,URL地址等。
概要示例: 下面咱们来看看如何判断字符的类型。
// 数字或者数字组合(可以返回结果,即程序退出状态是0,说明属于这种类型,反之否则)
$ i=5;j=9423483247234;
$ echo $i | grep [0-9]*
5
$ echo $j | grep [0-9]*
9423483247234
$ echo $j | grep [0-9]* >/dev/null
$ echo $?
0
// 字符组合(小写字母、大写字母、二者的组合)
$ c="A"; d="fwefewjuew"; e="fewfEFWefwefe"
$ echo $c | grep [A-Z]
A
$ echo $d | grep "[a-z]*"
fwefewjuew
$ echo $e | grep "[a-zA-Z]*"
fewfEFWefwefe
// 字母和数字的组合
$ ic="432fwfwefeFWEwefwef"
$ echo $ic | grep "[0-9a-zA-Z]*"
432fwfwefeFWEwefwef
// 空格或者Tab键等
$ echo " " | grep " "
$ echo -e "\t" | grep "[[:space:]]" #[[:space:]]会同时匹配空格和TAB键
$ echo -e " \t" | grep "[[:space:]]"
$ echo -e "\t" | grep "<tab>" #<tab>为在键盘上按下TAB键,而不是字符<tab>
// 匹配邮件地址
$ echo "test2007@lzu.cn" | grep "[0-9a-zA-Z\.]*@[0-9a-zA-Z\.]"
test2007@lzu.cn
// 匹配URL地址(以http连接为例)
$ echo "http://news.lzu.edu.cn/article.jsp?newsid=10135" | grep "http://[0-9a-zA-Z\./=?]*"
http://news.lzu.edu.cn/article.jsp?newsid=10135