一. 通配符

 通配符(wildcard)是一种用于文件名匹配的特殊字符。它们可用于命令行中与文件名相关的操作,如列出、复制、移动或删除文件等。

 通配符可以匹配文件名中的一部分或全部内容,而不必完全指定文件名。例如,在Linux系统中,"*.txt"表示匹配所有以".txt"结尾的文件名,而不必知道文件名的前缀和具体名称。通配符使得通过模式匹配进行文件处理变得更加方便快捷。


常用的通配符有:

符号

含义

*

表示匹配任意个数(包括0个)的任意字符。例如,.txt可以匹配所有以.txt结尾的文件名。

?

匹配一个任意字符。例如,file?.txt可以匹配file1.txt、file2.txt等文件名,但不能匹配file11.txt,因为只能匹配一个字符。

[ ]

表示匹配任意一个在方括号中列出的字符,例如[abc] 代表匹配a、b、c 中任意一个。

[ - ]

中括号中有 减号,代表【在编码顺序内的所有字符】,例如[0-9] 代表0-9之间的连续的所有数字。

[^ ]

中括号内的第一个字符为指数符号“^”,那就代表反向选择,例如[^abc] 表示有一个字符,只要是非 “a、b、c”的其他字符就能接受。


二. 特殊符号

特殊符号是指在Linux系统中有特殊意义或功能的字符


常见的特殊符号:

管道符

符号

含义

|

将一个命令的输出传递给另一个命令作为输入。


重定向符号

符号

含义

>

重定向,替换

>>

追加重定向,追加

<

输入重定向

<<

输入重定向,一般用于一段文本或命令作为标准输入传递给某个命令或程序,例如使用时需要在命令后面加上 "<< EOF"(EOF 可以替换为任意不包含空格和特殊字符的字符串)来指示输入的开始,然后输入文本或命令,最后以输入的开始标记结尾,例如 "EOF"。


命令分隔符

符号

含义

;

分隔符,可以将多个命令写在同一行中,每个命令用分号隔开。当遇到分号时,前面的命令会执行完毕后,才会执行后面的命令。

&&

逻辑与,用于连接两个命令,只有在第一个命令成功执行后,才会执行第二个命令。如果第一个命令执行失败,则不会执行第二个命令。

||

逻辑或,逻辑或也用于连接两个命令,但只有在第一个命令执行失败后,才会执行第二个命令。如果第一个命令执行成功,则不会执行第二个命令。


后台运行符

符号

含义

&

用于在后台运行程序,释放终端控制权,将命令变为后台任务


反斜杠符号

符号

含义

\

用于转义特殊字符,使【特殊字符|通配符】失去特殊含义。

引号

符号

含义

""

双引号,双引号内变量可以被解析。

''

单引号,不会解析变量,内容为纯文本,变量符号$也会做文本处理。


注释符号

符号

含义

#

注释,后面内容不执行

目录符号

符号

含义

/

目录符号,以/ 开头的目录路径是绝对路径

~

用户家目录, root用户家目录默认为/root , 其他用户家目录默认在/home/xxx


反义符号

符号

含义

感叹号,逻辑运算中表示“非”

命令范围符号

符号

含义

(  )

在中间表示子shell的起始和结束

{ }

在 Linux 命令行和 shell 脚本中的作用是用于扩展一系列字符串或命令。{ } 内部可以包含逗号分隔的多个字符串或命令,它们会被展开成一个单独的字符串列表。例如: 字符串扩展echo file_{1..5} ;  命令扩展 touch file{1,3,9}.txt  ;  嵌套扩展 echo  test_{1,5,7{a..d}} 输出“test_1 test_5 test_7a test_7b test_7c test_7d”


三. 正则

 分类:基础正则、扩展正则

 正则与通配符的区别:正则表达式和通配符都是用于文本匹配的工具,但它们的设计和使用方式不同。

通配符


是一种简单的匹配模式,用于指定文件名或路径。在Linux/Unix系统中," * "(星号)代表任何字符序列,而?(问号)代表任何单个字符。例如,"*.txt"表示所有以.txt结尾的文件名,而file?.txt表示所有以file开头,并且后面只有一个字符的.txt文件。通配符只能匹配文件名,不能在文本中进行高级匹配。

正则表达式

是一种更为强大的文本匹配模式,可以对文本中的任意字符序列进行匹配。它由一组特殊字符和元字符组成,每个元字符都具有特殊含义。例如,.(点号)代表任何单个字符,*(星号)代表前一个字符的零个或多个实例,[](方括号)代表其中任意一个字符等等。通过结合这些元字符,可以实现更复杂的文本匹配任务。

正则使用注意事项:

1. 正确理解元字符的含义和用法。元字符是正则表达式中最重要的部分,它们具有特殊含义并能够匹配文本中的指定模式。**特别注意中文字符**,不说了都是泪。

2. 注意转义字符的作用。在正则表达式中,某些字符具有特殊含义,例如"*"、"|"等,如果要匹配这些字符本身,则需要使用反斜杠\进行转义。

3. 选择合适的正则表达式工具。在不同的操作系统和编程语言中,可能会使用不同的正则表达式引擎和语法规则。

4. 避免过度复杂的正则表达式。在编写正则表达式时,应该尽量避免使用过于复杂的模式,以免降低匹配效率和可读性。可以通过拆分正则表达式和使用多个简单的模式来实现更好的匹配效果。

5. 进行正则表达式测试和优化。在编写正则表达式之后,进行测试和优化,以确保其能够正确地匹配文本,并且具有足够的性能和可维护性。

6. 正则表达式按照行为单位处理,使用正则表达式进行多行匹配时,可以使用\n元字符来表示换行符,以区分不同行之间的文本。


基础正则

符号


含义

.

匹配任意单个字符。 wor.d

^

匹配行首,以...开头的行。^world

$

匹配行尾,以...结尾的行。world$  

^$

匹配空行

\

转义字符,可以将具有特殊含义的元字符转义为普通字符或者具有特殊意义,例如\^,不表示匹配行首。具有特殊意义:\n 、 \d 、 \s 、\w 、\b  等

*

匹配零个或多个前一个字符。必须更在字符后面,如果需要任意字符使用.*  。

.*

(点星.*)匹配任意长度字符,包括空行。.* 会尽可能多的匹配符合条件的内容,这种匹配方式被称为贪婪匹配。例如:当前有字符"aabb ab  ababab abc" , 当我们匹配a.*b的时候, 除了最后一个c 其他都符合匹配条件(即正则匹配到的内容是"aabb ab  ababab ab"),所以.* 在某些时候不能得到我们想要的结果。

[ ]

匹配括号中任意一个字符, [abc] 相当于是一个符号(每次匹配1个字符) 找出包含a或b或c

[^ ]

匹配不在方括号中的任何字符,[^abc]  非 ,相当于是一个符号(每次匹配1个字符) ,匹配非abc这几个字符以外的任意字符

{n,m}

连续n到m哥的前一个字符  , 若为\{n\} 则是连续n个的前一个字符 ,  若是 \{n,\} 则是连续n个以上的前一个字符

linux通配符、特殊符号、正则_正则表达式


2. 扩展正则

符号

含义

+

匹配前一个字符的一个或多个字符

?

匹配前一个字符的零个或一个字符

|

或(or)的方式找出数个字符串

( )

匹配“群组”字符,与|类似,但是()的优点在于可以精确找出具有共同点的内容,例如需要找出abbbc\acccc\adddc ,  使用egrep  'a(bbb|ccc|ddd)c' 1 过滤可以准确的道具结果,使用egrep  'abbb|ccc|dddc' 1则会匹配到其他的内容

linux通配符、特殊符号、正则_特殊符号_02

linux通配符、特殊符号、正则_特殊符号_03

( )+

匹配重复的多个群组,例如需要找出abbbc\acccc\adddc ,  使用egrep  'a(b|c|d)+c' 1与上述匹配“群组”字符效果更方便

linux通配符、特殊符号、正则_正则_04

提醒: ! 和 > 在正则中不表示特殊符号,! 在正则中不表示 “非” ,如果需要查询这两个符号,可以使用"[ ]" , 例如 egrep   '[!>]'  test.txt   。 正则中排除字符不要使用!,例如 egrep  '[!a-d]'  test.txt 不支持的,需要使用 egrep '[^a-d]'  test.txt 。

来源:https://www.jianshu.com/p/8bea54b5b495      (也是我手敲的,不同平台)