bash通配符和正则表达式元字符部分归纳
Linux中有各种各样的字符,而且在不同环境和不同命令之下含义也不同
作为新手,决定先归纳学到的符号,方便后面学习厘清它们之间的关系。
glob 简化了的正则表达式
bash默认通配符:
? :只匹配一个任意字符;
* :匹配零个或多个任意字符;
[^] :方括号及其中^中的取反
[abc]:匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);
如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。
grep基本正则表达式元字符:
.: 匹配任意单个字符;
[]: 匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
*:匹配前面的字符任意次;
.*:任意长度的任意字符;
\?:匹配其前面的字符0或1次;即前面的可有可无;
\+:匹配其前面的字符至少1次;
\{m\}:匹配前面的字符m次;
\{m,n\}:匹配前面的字符至少m次,至多n次;
\{0,n\}:匹配前面的字符至多n次;
\{m,\}:匹配前面的字符至少m次;
^:行首锚定;用于模式的最左侧;
$:行尾锚定;用于模式的最右侧;
\< 或 \b:词首锚定;用于单词模式的左侧;
\> 或 \b:词尾锚定;用于单词模式的右侧;
\<PATTERN\>:匹配整个单词;
\(\):将一个或多个字符捆绑在一起,当作一个整体进行处理;
egrep及扩展的正则表达式
egrep = grep -E
扩展正则表达式的元字符:
字符匹配:
.
[]
[^]
*
?: 0或1次;
+:1次或多次;
{m}:匹配m次;
{m,n}:至少m,至多n次;
^
$
\<, \b
\>, \b
()
后向引用:\1, \2, ...
根据以上归纳,需要区分的符号
glob和grep的*符号,前者直接任意字符,后者匹配前一个字符任意次数
grep和egrep的?,+,{m,n},(),前者需要将这些字符转义,后者不需要
附其它一些bash符号说明
子字符类
[:alpha:]
匹配当前归类中的大写和小写字母字符。例如,'[0-9]{3}[[:alpha:]]{2}' 匹配三个数字,后跟两个字母。
[:alnum:]
匹配当前归类中的数字、大写和小写字母字符。例如,'[[:alnum:]]+' 匹配含有一个或多个字母和数字的字符串。
[:digit:]
匹配当前归类中的数字。例如,'[[:digit:]-]+' 匹配含有一个或多个数字或横线的字符串。同样,'[^[:digit:]-]+' 匹配含有一个或多个不是数字或横线的字符的字符串。
[:lower:]
匹配当前归类中的小写字母字符。例如,'[[:lower:]]' 不匹配 A,因为 A 为大写。
[:space:]
匹配单个空格 (' ')。
[:upper:]
匹配当前归类中的大写字母字符。例如,'[[:upper:]ab]' 与以下其中一项匹配:任何大写字母、a 或 b。
[:whitespace:]
匹配一个空白字符,例如,空格、制表符、换页符和回车符。
[:ascii:]
匹配任何七位的 ASCII 字符(0 到 127 之间的顺序值)。
[:blank:]
匹配一个空白区或水平制表符。
[[:blank:]] 等效于 [ \t]。
[:cntrl:]
匹配顺序值小于 32 或字符值为 127 的 ASCII 字符(控制字符)。控制字符包括换行符、换页符、退格符,等等。
[:graph:]
匹配打印字符。
[[:graph:]] 等效于 [[:alnum:][:punct:]]。
[:print:]
匹配打印字符和空格。
[[:print:]] 等效于 [[:graph:][:whitespace:]]。
[:punct:]
匹配其中一个字符: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~.
[:punct:] 子字符类不能包括当前归类中可用的非 ASCII 标点字符。
[:word:]
匹配当前归类中的字母、数字或下划线字符。
[[:word:]] 等效于 [[:alnum:]_]。
[:xdigit:]
匹配字符类 [0-9A-Fa-f] 中的字符。
# 注释说明
$ 变量符号
\ 转义字符 一般用在写很长的通配符上 我们可以把特殊字符或者通配符 转义成一般的字符
; 连续命令执行分割符号,例子 cp /etc /tmp ;ls /tmp ;cd etc ;rm etc
'' 反点号中间的先执行
/ 目录符号,路径分割
& 把作业放到后台去执行
~ 用户的主文件夹
!逻辑运算上的非