grep用法
Posted 借风拥你
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了grep用法相关的知识,希望对你有一定的参考价值。
grep 选项
-c :只输出匹配行的计数。
-i :忽略大小写(只适用于单字符)
-n :显示匹配行及行号
-v :取反(显示不匹配的行)
-w :精确匹配某个字符
-o :只显示被匹配到的字符串
--color :以颜色的形式显示被匹配到字符
我们可以通过设置别名来方便我们的操作
alias grep=‘grep -n --color‘
再次使用grep 效果如下:
[[email protected] ~]# grep "root" /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
11:operator:x:11:0:operator:/root:/sbin/nologin
关键词已经被着色并且显示行号
通配符:
* :任意长度的任意字符
?:单个字符
[] :范围之内
[^] :范围之外的
二、正则表达式
(1). (点):匹配任意单个字符
匹配以r开头,t结尾中间只有两个字符的行
例子: [[email protected] ~]# grep "r..t" /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
11:operator:x:11:0:operator:/root:/sbin/nologin
14:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
(2)* :一个单字符后紧跟*,匹配0或个多个此单字符。(就是这个字符可以出现多次,也可以不出现。)
(3).* ; 表示任意长度的任意字符
[[email protected] ~]# cat abc
a
b
ab
aab
acb
adb
amnb
匹配a开头b结尾,中间是任意字符的行
[[email protected] ~]# grep "a.*b" abc
ab
aab
acb
adb
amnb
其中ab中间没有字符也会被匹配到。任意长度的任意字符也包括空格
(4)a\{n\} : 用来匹配前面 a 的出现次数。n 为次数。
[[email protected] ~]# cat abc
ab
aab
aaab
aaaab
aaaaaaab
[[email protected] ~]# grep --color "a\{1\}b" abc
ab
aab
aaab
aaaab
aaaaab
a只匹配了一次
(5)a\{n,\} : 用来匹配前面 a 的出现次数。但是次数至少为n次。
[[email protected] ~]# grep "a\{1,\}b" abc
ab
aab
aaab
aaaab
aaaaab
a至少出现1次,出现多次也可以被匹配到
(6)a\{n,m\} :用来匹配前面 a 的出现次数。但是a出现的次数在 n 和 m 之间
[[email protected] ~]# grep "a\{1,3\}b" abc
ab
aab
aaab
aaaab
aaaaaaab
这次匹配到的内容,只匹配了a最多3次
三、正则中的字符集合
[:digit:] 表示数字
[:lower:] 表示小写字母
[:upper:] 表示大写字符
[:alpha:] 表示所有字符
[:punct:] 表示标点符号
[:alnum:] 表示所有数字和字符
在使用这些字符集合的时候,中括号外边必须在加一对中括号
例子:[[email protected] ~]# cat test
a
ab
abc
12
123
1234
a1
ab12
abc123
Abc
ABC123
要求1:过滤包含数字的行
[[email protected] ~]# grep "[[:digit:]]" test
12
123
1234
a1
ab12
abc123
ABC123
或是用这种方法也可以
grep -E "[0-9]" test
要求2:包含字符的行
[[email protected] ~]# grep "[[:alpha:]]" test
a
ab
abc
a1
ab12
abc123
Abc
ABC123
或是用这种方法也可以
grep -E "[a-z]|[A-Z]" test
在脚本中应用
#!/bin/bash
read -p "请输入内容: " a
if [[ $a =~ [a-z]|[A-Z] ]];then
echo "字符"
else
echo "非字符"
fi
用字符集合的话将[a-z]|[A-Z]替换成[[:alpha:]]
#!/bin/bash
read -p "请输入内容: " a
if [[ $a =~ [[:alpha:]] ]];then
echo "字符"
else
echo "非字符"
fi
以上是关于grep用法的主要内容,如果未能解决你的问题,请参考以下文章