通配符
文件名扩展
? 、*、 {1,2,3 }、[a-z]
例:
$ls a[a-z]c.txt
abc.txt
$
[ ]范围可以任意选择,但[a-z]与[0-9]用的最多,另外有一些定义好的类可以代替这两个范围,并且意义相同。[a-z]等同于[[:alpha:]],[0-9]等同于[[:digit:]]。
全部的可用类如下表:
类 | 成员 |
---|---|
alnum | A-Z、a-z、0-9 |
alpha | A-Z、a-z |
blank | 空格和制表符 |
cntrl | ASCII字符0-31 |
digit | 0-9 |
graph | A-Z、a-z、0-9与标点符号 |
lower | a-z |
ASCII字符32-127 | |
punct | 标点符号(A-Z、a-z、0-9以外的可打印字符) |
space | 空格、制表符、LF(10)、VT(11)、FF(12)、CR(13) |
upper | A-Z |
xdigit | 0-9、A-F、a-f |
使用 shopt -s nullglob 在没有匹配的情况下进行空串处理:
例如:
$for filename in a* b*
>do
> md5sum $filename
> done
54as6f5as56as4df654asf abc
87098asdf65asd87sddf6f abcsadf
md5sum: b*: No such file or directory
$shopt -s nullglob
$for filename in a* b*
>do
> md5sum $filename
>done
54as6f5as56as4df654asf abc
87098asdf65asd87sddf6f abcsadf
$
类似的还有 failglob、 extglob
–extglob列表
模式 | 匹配 |
---|---|
? | 0或1个模式 |
* | 0或多个模式 |
+ | 1或多个模式 |
@ | 1个模式 |
! | 除了一个模式以外的模式 |
ls abc*
ls abc*(.php|.txt)
ls abc+(.txt|.php)
ls abc@(.txt|.php)
ls abc!(.txt|.php)
正则表达式和引用
sed s/$foo/$bar/g myfile
sed s/"$foo"/"$bar"/g myfile
引用
三种形式:
单引号、双引号、反斜线
单引号,防止shell解释其中内容
双引号,部分字符会被shell解释,双引号中的单引号会被保留。
反斜线,正确显示某些字符。 例 ("),(;),(!),(、),(\\)
用于续行