正则表达式
grep搜索符合条件的行
man grep
print lines matching a pattern
grep abc需要标准输入,经常用于管道符的右侧
grep -v不包含pattern的选项
grep -i忽略大小写
grep -n加上匹配模式(pattern)行号
cat -n /etc/passwd |grep root
ls |grep ks
grep -c统计有几行匹配模式只显示行数
grep -oi只显示匹配模式(pattern)本身,忽略大小写
grep -q 是否有匹配模式都不显示,可以在$?中显示
echo $? 会显示匹配
grep -q “root” /etc/psswd =grep “root” /etc/passwd &> /dev/null
grep -nA3 root /etc/passwd显示字符串的后3行
grep -nb3 root 前3行
-nC3 前后3行
grep -e root -e bash /etc/passwd 包括root 或者 bash
grep root /etc/passwd |grep bash包括root 和 bash
echo “x2abc3y”|grep -w abc 加-w后字符默认为一个单词
“x2_abc_3y”
“x2-abc-3y”
只识别了“x2-abc-3y”
grep -f file
cat p.txt
root
bash
^c
grep -f p.txt /etc/passwd
可以看到出现了包含root bash 字符段的行
Prce(perl Compatible Regular Expressions)
元字符分类:字符匹配 匹配次数 位置锚定 分组
.代表一个字符的任意字符
\.代表.本身 转义
[]取中括号中的任意一个字符
[^]取除了括号中的任意一个字符
.
.
.
正则表达式
匹配次数
*某一个字符的出现次数
echo axb | grep x* *前面的字符出现的次数是不确定的
.* 代表以前通配符中的* 任意长度的任意字符串
\?前面一个字符出现了1次或0次
\+前面一个字符出现1次及以上
\{18\}确定18次
\{18,\}18次及以上
\{18,20\}18到20 次
\{,20\}20次以内
[a-z]\+小写字母至少出现一次
.放在[]中[.]代表任意字符 和通配符一样
将本机IP地址提取出来Centos7
ifconfig ens33 |grep -o “[0-9.]\{7,\}” |head -n1
ifconfig ens33 |grep -o “[[:digit:]]\{1,3\}\.””[[:digit:]]\{1,3\}\.””[[:digit:]]\{1,3\}\.””[[:digit:]]\{1,3\}” |head -n1
ifconfig ens33 |grep -o “[0-9.]\+” |cut -d” ” -f2
df |grep “dev/sd” |grep -o “[[:digit:]]\{1,3\}”%
正则表达式
位置锚定:定位出现的位置
^表示行首
^root 以root 开头
$表示行尾
bash$以bash结尾
空行”^$”表示空行
“^[[:space:]]*$”表示空行及TAB及空格行
\<root 代表单词root 前面没有字母,可能有冒号
root\>代表单词root 作为单词词尾
\<root\>和 -w root一样
\b也可以表示\<或者\>
正则表达式
分组
\(wang)\
echo wangwangwang |grep “\(wang\)\{3\}”
后项引用
“\(wang\)\{3\}.*\(wang\)\{3\}”z相当于\(wang\)\{3\}.*\1表达第一个括号中的结果的重复
\2
\3
以左括号(出现的顺序来定
\数字匹配的是第一个括号中表示的结果重复
echo rootxxrbbt |grep ‘\(r..t\).*\1’表示没有结果
echo rootxxroot |grep ‘\(r..t\).*\1’表示正确结果
grep “^\(a\|b\).*” /etc/passwd以a或b 开头
grep “a\|bxy”表示a或bxy开头
grep “\(a\|b\)xy”表示axy 或bxy开头
1、显示/proc/meminfo文件中以大小s开头的行(要求:使用两种方法)
grep ^[s\|S] /proc/meminfo
grep -i s /proc/meminfo
2、显示/etc/passwd文件中不以/bin/bash结尾的行
grep -v “/bin/bash$” /etc/passwd
3、显示用户rpc默认的shell程序
cat /etc/passwd |grep “^rpc\b” |cut -d: -f7
4、找出/etc/passwd中的两位或三位数
grep -o “[0-9]\{2,3\}” /etc/passwd
5、显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面有非空白字符的行
grep “^[[:space:]]\+.*[^[:space:]]$” /etc/grub2.cfg
6、找出“netstat -tan”命令结果中以LISTEN后跟任意多个空白字符结尾的行
netstat -tan |egrep “LISTEN[[:space:]]*$”
7、显示CentOS7上所有系统用户的用户名和UID
8、添加用户bash、testbash、basher、sh、nologin(其shell为/sbin/nologin),找出/etc/passwd用户名和shell同名的行
cat /etc/passwd |grep “^\(.\+\>\):.*\<\1$”
9、利用df和grep,取出磁盘各分区利用率,并从大到小排序
df |grep “/dev/sda”|grep -o “[0-9]\{1,2\}%”|sort -nr
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/95515