正則表達式 不懂的話,想學的話,鳥哥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