字符串:
- 简称“串”。有限字符的序列。数据元素为字符的线性表,是一种数据的逻辑结构。在计算机中可有不同的存储结构。在串上可进行求子串、插入字符、删除字符、置换字符等运算。
字符:
- 计算机程序设计及操作时使用的符号。包括字母、数字、空格符、提示符及各种专用字符等。
一般字符的运算包括:
- 第一、找出字符或者字符串的类型,是数字、字母还是其他特定字符,是可打印字符,还是不可打印字符(一些控制字符)。
- 第二、找出组成字符串的字符个数和字符串的存储结构(比如数组)。
- 第三、对串的常规操作:求子串、插入字符、删除字符、置换字符、字符串的比较等。
- 第四、对串的一些比较复杂而有趣的操作,这里将在最后介绍一些有趣的范例。
1. 字符串的属性
字符有可能是数字、字母、空格、其他特殊字符,而字符串有可能是它们任何一种或者多种的组合,在组合之后还可能形成一个具有特定意义的字符串,诸如邮件地址,URL地址等。
概要示例: 下面我们来看看如何判断字符的类型。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
//
数字或者数字组合(能够返回结果,即程序退出状态是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链接为例)
http:
//news
.lzu.edu.cn
/article
.jsp?newsid=10135
|
说明:
[1] /dev/null和/dev/zero是非常有趣的两个设备,它们都犹如一个黑洞,什么东西掉进去都会消失殆尽;后者则是一个能源箱,你总能从那里取到0,直到你退出。
[2] [[:space:]]是grep用于匹配空格或者TAB键类型字符串的一种标记,其他类似的标记请查看grep的帮助,man grep。
[3] 上面都是用grep来进行模式匹配,实际上sed, awk都可以用来做模式匹配,关于匹配中用到的正则匹配模式知识,大家可以参考正则匹配模式,更多相关资料请看参考资料。
[4] 如果仅仅想判断字符串是否为空,即判断字符串的长度是否为零,那么可以简单的通过test命令的-z选项来判断,具体用法见test命令,man test.
2.索引
expr index $string $substring
在字符串$string中所匹配到的$substring第一次所出现的位置.
1
2
3
4
5
6
|
stringZ=abcABC123ABCabc
echo
`
expr
index
"$stringZ"
C12`
# 6
# C 字符的位置.
echo
`
expr
index
"$stringZ"
1c`
# 3
# 'c' (in #3 position) matches before '1'.
|
expr实例
1、计算字串长度
> expr length “this is a test” 14
2、抓取字串
> expr substr “this is a test” 3 5 is is
3、抓取第一个字符数字串出现的位置
> expr index "sarasara" a 2
4、整数运算
> expr 14 % 9 5 > expr 10 + 10 20 > expr 1000 + 900 1900 > expr 30 / 3 / 2 5 > expr 30 \* 3 (使用乘号时,必须用反斜线屏蔽其特定含义。因为shell可能会误解显示星号的意义) 90 > expr 30 * 3 expr: Syntax error