shell脚本详细介绍(四)

目录

一.shell数组

1.数组的定义方法

 2、数组包括的数据类型

3.获取数组长度

4、获取数据列表

5、读取某索引赋值 

6、数组遍历

 7、数组切片

8、数组替换

9.数组删除 

 二.正则表达式

1.介绍

2.基础正则表达式常见元字符

3.扩展正则表达式元字符

4.grep工具

4.1查找特定字符

4.2查找任意一个字符“.”与重复字符“*”

4.3查找行首“^”与行尾字符“$”

4.4查找连续字符范围


一.shell数组

1.数组的定义方法

格式:数组名=(元素1    元素2   元素3.......元素n)

 2、数组包括的数据类型

  • 数值类型
  • 字符类型(字符串):使用" "或’ '定义,防止元素当中有空格,元素按空格分割

3.获取数组长度

4、获取数据列表

5、读取某索引赋值 

6、数组遍历

 

 7、数组切片

8、数组替换

9.数组删除 

 二.正则表达式

1.介绍

 又称正规表达式、常规表达式,匹配一系列符合某个规则的字符串

  • 基础正则表达式:BRE
  • 扩展正则表达式:ERE

组成:普通字符和元字符

      普通字符包括:大小写字母、数字、标点符号以及一些其他符号

      元字符:在正则表达中具有特殊意义的专用字符,可以规定其前导字符(即位于元字符前面的字符)在目标对象中出现模式

2.基础正则表达式常见元字符

支持grep、egrep、sed、awk

常见元字符	解释
\	转义字符,去除其后紧跟的元字符或通配符的特殊意义,例: !、\n、$等
^	匹配字符串开始的位置,除非在方括号表达式中使用,表示不包含该字符集合。要匹配“^” 字符本身,请使用“^”
$	匹配字符串结束的位置,如果设置了RegExp 对象的 Multiline 属性,则“KaTeX parse error: Undefined control sequence: \n at position 6: ”也匹配‘\̲n̲’或‘\r’。要匹配“”字符本身,请使用“$”
.	匹配除\n之外的任意的一一个字符,例:go.d、g…d
*	匹配前面子表达式0次或者多次,要匹配“”字符,请使用“*”,例: goo*d、 go.*d
[list]	匹配list列表中的一个字符,例:go [ola]d, [abc]、[a-z]、[a-z0-9]、[0-9]匹配任意一位数字
[^list]	匹配任意非list列表中的-一个字符,例: [^0-9]、 [^A-20-9]、 [^a-z],匹配任意一位非小写字母
[n1-n2]	字符范围。匹配指定范围内的任意一个字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意一个小写字母字符。
注意:只有连字符(-)在字符组内部,并且出现在两个字符之间时,才能表示字符的范围;如果出现在字符组的开头,则只能表示连字符本身
{n}	n 是一个非负整数,匹配确定的 n 次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的“oo”
{n,}	n 是一个非负整数,至少匹配 n 次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”
{n,m}	m 和 n 均为非负整数,其中 n<=m,最少匹配 n 次且最多匹配m 次
注意	egrep, awk使用{n}、{n,}、{n,m}匹配时“{}"前不用加“\”

3.扩展正则表达式元字符

  • 支持的工具:egerp、awk

元字符	解释
+	匹配前面子表达式1次以上,例:go+d,将匹配至少一个o,如god, good, goood等
?	匹配前面子表达式0次或者1次,例: go?d,将匹配gd或god
()	将括号中的字符串作为一个整体,例:g(oo) +d,将匹配。整体1次以上,如good,gooood等
|	以或的方式匹配字条串,例:g(oo|la)d,将匹配good或者glad
+	egrep -n 'wo+d' test.txt     	     #查询"wood" "woood" 			"woooooood"等字符串
?	egrep -n 'bes?t' test.txt			 #查询“bet”“best”这两个字符串
|	egrep -n 'of|is|on' test.tx			 #查询"of"或者"if"或者"on"字符串
()	egrep -n 't(a|e)st' test.txt		 #查询"tast"或者"test"字符串
()+ egrep -n 'A(xyz)+C' test.txt		 #查询开头的"A"结尾是"C",中间有一个以上的"xyz"字符串的意思

4.grep工具

grep -c "the" web.sh        #统计the字符总行数;
grep -i "the" web.sh        #不区分大小写查找the所有的行
grep -v "the" web.sh        #反选(除the以外的)
grep -n  ".$" web.sh        #顺便输出以.结尾的行号

4.1查找特定字符

grep -ni 'the' test.txt     
#查找特定字符非常简单,如执行此命令即可从 test.txt 文件中查找出特定字符“the”所在位置。其中“-n”表示显示行号、“-i”表示不区分大小写。命令执行后,符合匹配标准的字符, 字体颜色会变为红色(本章中全部通过加粗显示代替)
grep -vn 'the' test.txt
#若反向选择,如查找不包含“the”字符的行,则需要通过 grep 命令的“-v”选项实现,并配合“-n”一起使用显示行号

4.2查找任意一个字符“.”与重复字符“*”

[root@localhost ~]# grep -n 'w..d' test.txt
5:google is the best tools for search keyword.

8:a wood cross!
9:Actions speak louder than words

4.3查找行首“^”与行尾字符“$”

[root@localhost ~]# grep -n '^the' test.txt
4:the tongue is boneless but it breaks bones.12!
#基础正则表达式包含两个定位元字符:“^”(行首)与“$”(行尾),如果想要查询以“the”字符串为行首的行,则可以通过“^”元字符来实现。
[root@localhost ~]# grep -n '^$' test.txt
10:
#查询空白行

4.4查找连续字符范围

案例1:查询两个o的字符

[root@localhost ~]# grep -n 'o\{2\}' test.txt
 3:The home of Football on BBC Sport online. 
 5:google is the best tools for search keyword. 
 8:a wood cross!
11:#woood # 12:#woooooood #
14:I bet this place is really spooky late at night!

案例2:查询以 w 开头以 d 结尾,中间包含 2~5 个 o 的字符串

[root@localhost ~]# grep -n 'wo\{2,5\}d' test.txt
8:a wood cross! 11:#woood #

猜你喜欢

转载自blog.csdn.net/Ab960311/article/details/120288386
今日推荐