通配符与正则表达式
通配符一般用于命令行bash环境,而linux正则表达式用于grep, sed, awk场景
正则表达式用来在文件中搜索符合条件的字符串,正则是包含匹配(模糊查询)。grep、awk、sed等命令可以支持正则表达式。
通配符用来在系统中搜索符合条件的文件名,通配符是完全匹配(精确查询)。ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了。
比如说有aa和aabb
ls aa,只显示aa就是完全匹配,aa和aabb都显示了就是包含匹配
正则表达式
*.^ 的含义和通配符中完全不同
grep是一个文本查找命令,后面可以跟2个参数
grep [关键字] [目标文件]
ls -al /etc |grep 'ssh'
在ls的输出中查找带有ssh字样的行
注意 | 和grep经常放在一起使用,但是|才是管道,grep和管道没有关系,知识一个文本查找命令
“*” 代表前一个字符匹配0次或任意多次
①在文件中匹配所有内容,包括空白行
grep "a*" list.txt
②匹配至少包含有一个a的行
grep "aa*" test_rule.txt
③匹配最少包含两个连续a的字符串
grep "aaa*" test_rule.txt
④匹配最少包含四个连续a的字符串
grep "aaaaa*" test_rule.txt
“.” 匹配除了换行符外的任意一个字符
①匹配在s和d这两个字母之间一定有两个字符的单词
grep "s..d" test_rule.txt
②匹配在s和d字母之间有任意字符
grep "s.*d" test_rule.txt
③匹配所有内容
grep ".*" test_rule.txt
“^”匹配行首,“$”匹配行尾①匹配以大写“M”开头的行
grep "^M" test_rule.txt
②匹配以小写“n”结尾的行
grep "n$" test_rule.txt
③匹配空白行
grep -n "^$" test_rule.txt
"[]"匹配括号中指定的任意一个字符,只匹配一个字符①匹配任意一个数字
grep "[0-9]" test_rule.txt
②匹配用小写字母开头的行
grep "^[a-z]" test_rule.txt
③匹配s和i中间的字母中,是a或o的情况。
grep "s[ao]id" test_rule.txt
"[^]' 匹配除括号的字符外任意一个字符
①匹配非小写字母开头的行
grep "^[^a-z]" test_rule.txt
②匹配非字母开头的行
grep "^[^a-zA-Z]" test_rule.txt
"\{n\}" 表示前面的字符恰好出现n次
①匹配a字母连续出现三次的字符串
grep "a\{3}" test_rule.txt
②匹配包含连续的三个数字的字符串
grep "[0-9]\{3\}" test_rule.txt
"\{n,\}" 表示其前面的字符出现不少于n次
匹配最少用连续三个数字开头的行
grep "^[0-9]\{3,\}[a-z]" test_rule.txt
"\{n,m\}" 匹配前面的字符至少出现n次,最多出现m次匹配在字母s和字母i之间有最少一个a,最多三个a
grep "sa\{1,3\}i" test_rule.txt