Linux---Shell(符号 与 正则表达式)

目录

一、符号

1.1 引号

 1.1.1 单引号(' ')

1.1.2 双引号(" ")

1.1.3 反引号(` `)

1.2 通配符

1.2.1 通配符 " * "

1.2.2 通配符 " ? "

1.2.3 通配符 " [ ] "

1.2.4 通配符 " [!] "

1.3 连接符

1.3.1 " ; " 连接符

1.3.1 " && " 连接符

1.3.1 " || " 连接符

二、正则表达式

2.1 元字符

2.1.1 基础正则表达式元字符

2.1.2 扩展正则表达式元字符


一、符号

        Shell中符号有着各种各样的作用,如引发、通配符、连接符等,借助这些符号,可以帮助用户完成更复杂的功能

1.1 引号

        在 Shell 中引号主要用来转换元字符的含义,所谓的元字符是指那些在正则表达式中具有特殊处理能力的字符,如 $、\ 、> 等字符,Shell中由三种引号:单引号、双引号、反引号

 1.1.1 单引号(' ')

        将它中间的字符还原为字面意义,实现屏蔽Shell元字符的功能,注:单引号必须成对存在,不能在两个单引号之间单独使用一个单引号

如:NUM=100  | echo $NUM | echo '$NUM' (定义变量NUM,赋值并输出)

  

1.1.2 双引号(" ")

        双引号有实现屏蔽Shell元字符的功能,但不会屏蔽 “ $ 、\ 、`` ”,在双引号中单引号可以单个出现

如 echo " $NUM " 

1.1.3 反引号(` `)

        可以进行命令替换,反引号和双引号可以结合使用,但不能与单引号结合使用,因为单引号的屏蔽功能会屏蔽掉反引号的功能

如:echo " today is ` date `" (输出系统当前时间)

        echo ' today is ` date `'

1.2 通配符

        Shell 通配符一般用于数据处理或文件名匹配

1.2.1 通配符 " * "

        通配符" * " 可匹配多个字符串

如:ls -d /etc/sys* (匹配 /etc/路径下所有 以 sys字符串开头的文件)

        -d 表示仅对目标目录进行处理,不递归处理目录中的文件 

1.2.2 通配符 " ? "

         通配符 " ? "每次只能匹配单个字符串,通常与其他通配符联合使用

如:ls -d /etc/???.conf (匹配 /etc/目录下 以.conf 结尾的三个字符开头的文件)

1.2.3 通配符 " [ ] "

        与 "[ ]" 内的任意字符匹配,通常是一个范围

如:ls /etc/[a-d]*.conf

1.2.4 通配符 " [!] "

        与 " [! ] "外的任意元素匹配

如:ls /etc/y*[!.conf] (匹配 /etc/目录下 以y开头,不以.conf结尾的文件]

1.3 连接符

        Shell中提供用于连接命令的符号,使用这些符号,可以对多条指令按顺序或命令执行结果有选择的执行

1.3.1 " ; " 连接符

        会让使用 " ; " 的命令,按顺序依次执行

如:SUM=100; echo "$SUM" ; echo "sum is $SUM"

 执行顺序按照排列的先后执行,多用于安装命令

1.3.1 " && " 连接符

        使前后命令的执行顺序满足逻辑与关系才能执行符号后面的命令,只有“&&”符号前的执行成功以后才会执行后面的命令

如:cat ./test.txt && echo "目录存在"( 输出 test.txt 文件,如果存在则输出“目录存在”)

1.3.1 " || " 连接符

        与“&&” 连接符相反,但符号前面命令执行失败时才会执行后面的命令

如:cat ./test.txt || echo "目录存在"( 输出 test.txt 文件,如果不存在则输出“目录不存在”)

二、正则表达式

        正则表达式是预先定义好的一组规则(也称模式),这组规则通常应用于文本搜索与替换中

相关概念:

正则表达式可以对文本进行过滤,因为它定义了一系列元字符,元字符与其他字符组合起来形成了一定的规则,只有符合规则的文本才能被保留下来,否则将会被过滤

2.1 元字符

2.1.1 基础正则表达式元字符

        默认在 grep 命令下进行,符合基础正则表达式

(1)限定符 " * "

        用于匹配前导字符0次或多次

如:ls hel*o(列出以hel开头 o结尾的文件)

 

(2)点字符 " . "

        用匹配除换行符"\n"外任意的单个字符

如:ls he.(列出以 he开头任意【除 ”\n“】字符结尾的文件)

(3)行首定位符 " ^ "

        用来匹配行首字符,表示行首的是 ”^“后的字符

如:ls /etc | grep "^sys"(列出 etc目录下以sys开头的文件)

 

(4)行尾定位符 " $ "

        用来匹配文本末行的字符,表示行末的字符,与行首匹配相反

如:ls /ect | grep conf$ (列出 /etc 目录下以conf结尾的文件)

 

(5)字符组 "[ ] "

        用来指定一个字符集合

如: ls ./one | grep test[1-9] (列出 /one 目录下 test开头,数字1-9结尾的文件)

 

(6)排除型字符组 "[^]"

        表示不匹配[]里的字符,用法与 字符组 [^]  相反

2.1.2 扩展正则表达式元字符

        扩展正则表达式默认使用的是扩展正则表达式,如果要使用grep,需要使用-E 选项

(1)限定符 " + "

        限定符 ” + “ 与 符号 ” * “ 相似,都可匹配其前导字符多次,但 ” * “ 号支持匹配 0次,而限定符 ” + “至少匹配一次

如:ls hel*o(列出以hel开头 o结尾的文件)

       ls egrep hel+o

 

(2)限定符 " ? "

        限定前导字符最多出现一次,即前导字符可出现0次或1次

如 ls /etc | egrep "sss?" (列出 etc目录下 sss开头的文件)

 

(3)" | " 和 "()"符号 

        " | " 符号用于正则表达式之间的”或“运算,“()”符号一组可选的集合,两组合通常使用,表示一组可选的集合

ls /etc | egrep "(ssh | ssl | ^yum)" (列出ect 目录下 的 ssh或ssl 或yum开头的文件

猜你喜欢

转载自blog.csdn.net/weixin_64428129/article/details/127405658