Shell学习之结合正则表达式与通配符的使用
目录
通配符
- 正则表达式与通配符
- 通配符
- 通配符的使用
正则表达式
- 正则表达式
- 正则表达式的使用
通配符
正则表达式与通配符
正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命令可以支持正则表达式。通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来就行匹配。
通配符
符号 作用
* 匹配任何字符串/文本,包括空字符串;*代表任意字符(0个或多个) ls file *
? 匹配任何一个字符(不在括号内时)?代表人意1个字符 ls file 0
[abcd] 匹配abcd中任何一个字符
[a-z] 表示范围a到z,表示范围的意思 []匹配中括号中任意一个字符 ls file 0
{..} 表示生成序列。以逗号分隔,且不能有空格
补充
[!abcd] 或[^abcd]表示非,表示不匹配括号里面的任何一个字符
通配符的使用
? 匹配任何一个字符
ls /bin/???ls /bin/??
[abcd] 表示匹配中括号内任意一个字符就成立
ls te[asb]t
{}生成序列
touch {a..c}
匹配文件
ls [a-c]
利用{}备份数据库
表示将ae复制一份叫做affff
cp a{e,fff}表示将ae做备份叫做ae.bak
cp a{e,e.bak}
!^表示非,取反
查找文件名里没有a和e的文件名
ls [!ae]ls [^ae]
正则表达式
正则表达式
正则表达式的使用
"*" 前一个字符匹配0次,或者任意多次匹配至少包含有一个a的行
grep "aa*" test.txt匹配至少包含有两个a的行
grep "aaa*""."匹配除了换行符以外任意一个字符匹配所有内容
grep ".*" test.txt匹配在s与d之间一定有两个字符的单词
grep "s..d" test.txt匹配在s与d之间有任意字符
grep "s.*d" test.txt"^"匹配行首,"$"匹配行尾匹配空白行
grep "^$" test.txt匹配以大写字母M开头的行
grep "^M" test.txt匹配以小写字母m结尾的行
grep "m$" test.txt"[]'匹配中括号中指定的任意一个字符,只匹配一个字符
匹配s和i字母中,要不是a、要不是b
grep "s[ao]id" test.txt匹配任意一个数字
grep "[0-9]" test.txt匹配用小写字母开头的行
grep "^[a-z]" test.txt"[^]"匹配除中括号的字符以外的任意一个字符
匹配不用小写字母开头的行
grep "[^a-z]" test.txt匹配不用字母开头的行
grep "^[^a-zA-Z]" test.txt
"\" 转义符
匹配以点结尾的行
grep "\.$" test.txt"\{n\}" 表示其前面的字符恰好出现n次匹配a字母连续出现三次的字符串
grep "a\{3\}" test.txt匹配包含连续的三个数字的字符串
grep "[0-9]\{3\}" test.txt"\{n,\}" 表示其前面的字符出现不小于n次匹配最少用连续三个数字开头的行
grep "^[0-9]\{3,\}[a-z]" test.txt"\{n,m\}'匹配其前面的字符至少出现n次,最多出现m次匹配在字母s和字母i之间有最少一个a,最多三个a
grep "sa\{1,3\}i" test.txt