shell中字符串處理

正則表達式 不懂的話,想學的話,鳥哥Linux私房菜講了,百度:鳥哥Linux私房菜。進入鳥哥的這個網站,通常是第一個。很容易找到。正則表達式

 

此文轉載,原文更繁雜,此處爲摘抄及修改小程序

Shell的字符串處理bash

此處字符串爲」abcd「jsp

1 獲得長度

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

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
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

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 "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

相關文章
相關標籤/搜索