shell中字符串处理

正则表达式 不懂的话,想学的话,鸟哥Linux私房菜讲了,百度:鸟哥Linux私房菜。进入鸟哥的这个网站,一般是第一个。很容易找到。

 

此文转载,原文更繁杂,此处为摘抄及修改

Shell的字符串处理

此处字符串为”abcd“

1 得到长度

x="abcd"
#方法一
expr length $x
4
# 方法二
echo ${#x}
4
# 方法三
expr "$x" : ".*"
4
# expr 的帮助
# STRING : REGEXP anchored pattern match of REGEXP in STRING

2 查找子串,返回字符位置,第一个位置为1

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

3 得到子字符串

# 方法一,返回从startpos开始的,长length的子字符串
# expr <string> startpos length
expr substr "$x" 1 3
abc
expr substr "$x" 1 5
abcd
expr substr "$x" 2 5
bcd

# 方法二,长度为空的,返回到结尾
# ${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}
bc

# 方法三

%echo $x | cut -c 1-3

abc

附:

小程序

#!/bin/bash

echo 请输入两个非负整数,然后回车输入一条字符串

echo n m

echo “str”

expr substr “$str” $n $m

4 匹配正则表达式

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

5 字符串的掐头去尾

x=aabbaarealwwvvww

去尾,中间不隔其他字符
echo "${x%w*w}"
aabbaarealwwvv

中间有其他字符
echo "${x%%w*w}"
aabbaareal

去头,原理与尾类似
echo "${x##a*a}"
lwwvvww
echo "${x#a*a}"
bbaarealwwvvww

其中 , # 表示掐头, 因为键盘上 # 在 $ 的左面。
其中 , % 表示%, 因为键盘上 % 在 $ 的右面。
单个的表示最小匹配,双个表示最大匹配。
也就是说,当匹配的有多种方案的时候,选择匹配的最大长度还是最小长度。

6 字符串的替换


x=abcdabcd
echo ${x/a/b} # 只替换一个
bbcdabcd
echo ${x//a/b} # 替换所有
bbcdbbcd

不可以使用 regexp , 只能用 * ? 的文件扩展方式。

7 字符的处理


x=abcd

printf "%30s\n" $x

右边补空格

printf "%-30s\n" $x

左边补空格

8 字符串使用例子

字符有可能是数字、字母、空格、其他特殊字符,而字符串有可能是它们任何一种或者多种的组合,在组合之后还可能形成一个具有特定意义的字符串,诸如邮件地址,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 "[email protected]" | grep "[0-9a-zA-Z\.]*@[0-9a-zA-Z\.]"
[email protected]
// 匹配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

你可能感兴趣的:(字符串,百度,表达式,p,的)