shell 下正则表达式的匹配

一、用法讲解

(1).匹配任意单字符
例如:..xc..表示第一、二、五、六个字母任意三四个字母是xc的字符串
(2)^匹配字符串的开头的字母
例如:^d表示以d开头的字符串
(3)$匹配字符串结尾的字母
trobule$表示匹配以trobule结尾的行
d$表示匹配以字母d结尾的字符
(4)^$表示匹配空行
^.$匹配只包含一个字母的行
(5)*匹配字符串中单个字符或其重复序列
compu*t表示匹配一个或多个u的字符串,如compuut,comput,compuuuut等
(6)\屏蔽一个特殊字符
特殊字符包括:$.'"*[]^|0\+?
如要显示*.pas,则可用\*\.pas表示
(7)[]匹配一个范围或集合
比如[0-9]表示匹配0到9的十个数字
(8)\{\}匹配模式结果出现的次数
比如:
pattern\{n\}匹配模式出现n次
pattern\{n,\}匹配模式至少出现n次
pattern\{n,m\}匹配模式出现n到m次

(9)经常使用的正则表达式

^行首
$行尾
^[the]以the开头
[Ss]igna[Ll]匹配Signal,signal,signaL,SignaL
[Ss]igna[Ll]\.同时,加一句号.
[mayMAY]包含may大写或小些字母的行
^user$只包含user的行
[tty]$以tty结尾的行
\.带句号的行
^d..x..x..x用户、组、其他用户均有执行权限的目录
^[^l]排除关联目录的目录列表
[.*0]0之前后之后加任意字符
[000*]000或者更多个
[^$]空行
[^.*$]匹配行中任意字符串
^......$包括6个字符的行
[a-zA-Z]任意单字符
[^0-9\$]非数字或$字母
[123]数字1到3中的一个
[Dd]evice单词Device或device
de..ce前两个是de后跟两个任意字符,最后两个是ce
\^q以^q开始行
^.$只有一个字符的行
^\.[0-9][0-9]以.和两个数字开始的行


二、shell相关

1.取子串常用

(1)echo ${string:1:2}

(2)echo $string |cut -c 2-3 (取string 的第2到第3个字符)
2.对字符串的处理

包括:截取,连接,匹配,替换,翻转

1.截取
方法一
echo $a|awk '{print substr( ,1,9)}'
substr是awk中的一个子函数,对第一个参数的进行截取,从第一个字符开始,共截取9个字符,如果不够就从第二个字符中补
方法二
echo $a|cut -b2-9
cut:对标准输入的字符串进行处理
cut -bn-m:以byte为单位,从第n个byte开始,取m个
cut -bn,m:以byte为单位,截取第n,m个byte
cut -b-n,m:以byte为单位,截取1-n,和第m个
-c:以charactor为单位
-d:指定分隔符,默认为tab
-s:使标准输入中没有delimeter
cut -f1:截取第1个域 
方法三
a=123456
echo ${string:1:2}
方法四
使用sed截取字符串的最后两位
echo $test |sed 's//(.*/)/(../)$//'
截取字符串的前2位
echo $test |sed 's/^/(../)/(.*/)//'

2.连接
$a$b
或者
$string 

3.匹配

查找目录下所有文件内容含有"aaa"的文件

grep -r "aaa" ./

4.替换

将一批文件中的所有string替换
vi打开

:%s/原串/新串/


5.翻转(未测试)
方法一:
使用rev命令
方法二:
编写脚本实现
#!/usr/bin/awk -f
################################################################
# Description : duplicate rev in awk
################################################################
{
revline = ""
for (i=1;i<=length;i++)
{
revline = substr(,i,1) revline
}
}
END{print revline}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章