Shell脚本(四)

it2024-11-17  3

Shell脚本应用(四)

一、 正则表达式

1、 正则表达式的常见的选项和应用

(1)正则表达式常见的选项

-n:显示行号

-o:显示匹配内容

-i:不区分大小写

-vn:取反

(2)正则表达式常见的元字符

^:起始内容

$:结束内容

.:匹配任意单个字符

[]:匹配括号中的内容

[-]:匹配括号里边内容的范围

{n}:匹配范围的次数

{n1-n2}:匹配开始和结束的内容

[^]:匹配括号之外的任意字符

\:转义字符

(3)查看特定字符(grep)从test.txt文件中查找“the”所在位置,并显示行号

[root@centos01 ~]# grep -n 'the' test.txt

(4)方向选择,查找不包含“the”字符的行

[root@centos01 ~]# grep -vn 'the' test.txt

(5)查找“shirt”与“short”这两个字符串使用中括号“[]”

[root@centos01 ~]# grep -n 'sh[io]rt' test.txt

(6)查找包含重复单个字符“oo”

[root@centos01 ~]# grep -n 'oo' test.txt

(7)查找“oo”前面不是“w”的字符串时,使用“[^]”

[root@centos01 ~]# grep -n '[^w]oo' test.txt

(8)若不希望“oo”前面存在小写字母,可以使用“[^a-z]”

[root@centos01 ~]# grep -n '[^a-z]oo' test.txt

(9)查找“the”字符串为行首的行

[root@centos01 ~]# grep -n ‘^the’ test.txt

(10)查询以小写字母开头的行用“^[a-z]” [root@centos01 ~]# grep -n '^[a-z]' test.txt

(11)查询不以字母开头的使用“^[^a-zA-Z]” [root@centos01 ~]# grep -n '^[^a-zA-Z]' test.txt

(12)使用转义符“\”查询以小数点结尾的行

[root@centos01 ~]# grep -n '\.$' test.txt

(13)查询空白行使用“^$”

[root@centos01 ~]# grep -n '^$' test.txt

(14)查找“w??d”字符串使用小数点

[root@centos01 ~]# grep -n 'w..d' test.txt

(15)查询包含至少两个以上o以上的字符串使用“ooo*”

[root@centos01 ~]# grep -n 'ooo*' test.txt

(16)查询以w开头d结尾,中间包含至少一个o的字符串使用“woo*d”

[root@centos01 ~]# grep -n 'woo*d' test.txt

(17)查询以w开头d结尾,中间的字符可有可无的字符串,使用“w.*d”

[root@centos01 ~]# grep -n 'w.*d' test.txt

(18) 查询任意数字所在行

[root@centos01 ~]# grep -n '[0-9][0-9]*' test.txt

(19)查询两个o的字符

[root@centos01 ~]# grep -n 'o\{2\}' test.txt

(20)查询以w开头d结尾,中间包含2~5个o的字符串

[root@centos01 ~]# grep -n 'wo\{2,5\}d' test.txt

(21)查询以w开头d结尾,中间包含2个以上o的字符串

[root@centos01 ~]# grep -n 'wo\{2,\}d' test.txt

2、 扩展正则表达式

(1)扩展正则表达式常见元字符

+:重复一个或者一个以上的前一个字符

?:零个或者一个的前一个字符

|:使用或者的方式找出多个字符

():查找“组”字符串

()+:辨别多个重复的组

(2)查询以wo开头d 结尾前面重复一个或者多个字符显示出来

[root@centos01 ~]# egrep -n 'wo+d' test.txt

(3)匹配d前面任意字符显示出来

[root@centos01 ~]# egrep -n '?d' test.txt

(4)匹配linux或者Linux字符显示出来

[root@centos01 ~]# egrep -n 'linux|Linux' test.txt

(5)匹配h,o,r任意字符显示出来

[root@centos01 ~]# egrep -n '(h|o|r)' test.txt

(6)匹配以s开头t结束中间是hor的字符

[root@centos01 ~]# egrep -n 's(hor)t' test.txt

(7)查询开头的”A”结尾的”C”,中间有一个以上的”xyz”字符

[root@centos01 ~]# egrep -n 'A(xyz)+C' test.txt

二、 sed和awk文本处理应用

1、 sed命令常见选项和操作符

(1)sed命令常见的选项

-n:表示仅显示处理后的结果

-e:指定目命令或者脚本来处理输入的文本文件

-f:指定脚本文件来处理输入的文本文件

-h:显示帮助

-i:直接编辑文本文件

(2)sed命令常见的操作符

a:增加内容

d:删除内容

c:替换,将选定行替换为指定内容

p:打印内容

y:字符转换

i:插入

s:替换,替换指定字符

(3)显示1到5行内容

[root@centos01 ~]# sed -n '1,5p' test.txt

(4)显示所有奇数行(n表示读入下一行资料)

[root@centos01 ~]# sed -n 'n;p' test.txt

(5)显示第1~5行之间的奇数行

[root@centos01 ~]# sed -n '1,5{p;n}' test.txt

(6)输出从第4行至第一个包含the的行

[root@centos01 ~]# sed -n '4,/the/p' test.txt

(7)结合nl命令(用于计算文件的行数)删除第三行

[root@centos01 ~]# nl test.txt | sed '3d'

(8)删除包含cross的行,,原本的第8行被删除

[root@centos01 ~]# nl test.txt | sed ‘/cross/d’

(9)删除以小写字母开头的行

[root@centos01 ~]# sed '/^[a-z]/d' test.txt

(10)将文件中所有the替换为THE

[root@centos01 ~]# sed 's/the/THE/g' test.txt

(11)将每行中的第一个the替换为THE

[root@centos01 ~]# sed 's/the/THE/' test.txt

(12)在每行行首插入#号

[root@centos01 ~]# sed 's/^/#/' test.txt

(13)将第1~5行内容转移至第17行后

[root@centos01 ~]# sed '1,5{H;d};17G' test.txt

(14)在第3行后插入一个新行,内容为New

[root@centos01 ~]# sed '3aNew' test.txt

(15)使用脚本编辑文件将第1~5行内容转移至第17行后

[root@centos01 ~]# vi opt.list 1,5H 1,5d 17G [root@centos01 ~]# sed -f opt.list test.txt

2、 awk

(1)awk的作用

读取文本数据根据需要过滤关键内容

(2)awk中的变量

FS:指定每行文本的字段分隔符,默认为空格制表位

NF:当前处理的行的字段个数

NR:当前处理的行的行号(序数)

FILENAME:被处理的文件名

RS:数据记录分隔,默认为ln,即每行为一条记录

$n:当前处理的第n个字段(第n列)

$0:当前处理的行的整行内容

(3)输出所有内容

[root@centos01 ~]# awk '{print}' test.txt

(4) 输出所有奇数行的内容

[root@centos01 ~]# awk '(NR%2)==1{print}' test.txt

(5)输出第1~3行内容

[root@centos01 ~]# awk 'NR==1,NR==3{print}' test.txt

最新回复(0)