正则表达式(grep,sed)

只愿长相守 提交于 2020-02-07 02:11:12

正则表达式

元字符
.* 任意长度的任意字符 尽可能多匹配
[] 匹配指定范围内的任意单个字符,示例:[wang] [0-9] [a-z] [a-zA-Z]
[^] 匹配指定范围外的任意单个字符,示例:[^wang]
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
[:print:] 可打印字符,标点符号
+ 匹配其前面的字符至少1次
{n} 匹配前面的字符n次
{m,n} 匹配前面的字符至少m次,至多n次
位置锚定: ^ 行首锚定
$ 行尾锚定
< 词首锚定
> 词尾锚定
^$ 空行
分组: ( ) 多个字符捆绑在一起 \1引用 后向引用:引用前面匹配到的字符本身
或者: |
扩展正则表达式: 不加\

grep

grep行过滤器
格式:grep ^root /etc/passwd
选项: -v 排除,取反
-i 忽略大小写
-o 匹配字符本身
-E 扩展正则表达式
-A -B -C 匹配后5行,前5行,前后5行

例题
显示/proc/meminfo文件中以大小s开头的行(要求:使用两种方法)

cat /proc/meminfo | grep  '^S\|^s'
cat /proc/meminfo | grep -i '^S'

显示/etc/passwd文件中不以/bin/bash结尾的行

cat /etc/passwd | grep -v '/bin/bash$'

显示用户rpc默认的shell程序

cat /etc/passwd | grep '^rpc\>'| rev | cut -d':' -f1 | rev

找出/etc/passwd中的两位或三位数

cat /etc/passwd | grep -o '\<[0-9]\{2,3\}\>'

显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面有非空白字符的行

cat /etc/grub2.cfg | grep '^[[:blank:]]\+.*[^[:blank:]].*'

找出“netstat -tan”命令结果中以LISTEN后跟任意多个空白字符结尾的行

netstat -tan | grep 'LISTEN.*[[:blank:]]\+'

显示CentOS7上所有UID小于1000以内的用户名和UID

cat /etc/passwd | cut -d':' -f1,3 | grep '\<[0-9]\{1,3\}\>'

添加用户bash、testbash、basher、sh、nologin(其shell为/sbin/nologin),找出/etc/passwd用户名和shell同名的行

cat /etc/passwd | grep -o '^\(.*\)\>.*\1$'

利用df和grep,取出磁盘各分区利用率,并从大到小排序

df | grep '^/dev/sda'| tr -s ' ' %| cut -d'%' -f5|sort -nr

sed

sed 行编辑器
格式: sed 选项 ‘地址命令’ 文件
选项: -n 关闭输出
-i 修改文件 -i.bak 修改并备份
-r 支持正则表达式
地址命令
地址: 2 第二行 $ 最后一行 3,6
/ / 正则表达式匹配到的行 / /,/ /
命令: p 输出 !p 取反 d 删除匹配到的行
s///p 查找替换
例: ifconfig | sed -nr ‘2S/net/bak/p’

删除centos7系统/etc/grub2.cfg文件中所有以空白开头的行行首的空白字符

cat /etc/grub2.cfg | sed -nr 's/^[[:blank:]]+//p'

删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符

cat /etc/fstab | sed -rn 's/^#[[:blank:]]+//p'

在centos6系统/root/install.log每一行行首增加#号

cat /root/2install.log | sed -rn 's/^/#/p'

在/etc/fstab文件中不以#开头的行的行首增加#号

cat /etc/fstab | sed -rn 's/^[^#]/#/p'

处理/etc/fstab路径,使用sed命令取出其目录名和基名

echo /etc/fstab | sed -rn 's#(.*)/([^/]+)/?#\1#p'
/etc
echo /etc/fstab | sed -rn 's#(.*)/([^/]+)/?#\2#p'
fstab

利用sed 取出ifconfifig命令中本机的IPv4地址

ifconfig | sed -nr '2s/(.*inet )([0-9].*)(netmask.*)/\2/p'

统计centos安装光盘中Package目录下的所有rpm文件的以.分隔倒数第二个字段的重复次数

ls /Packages/|rev|cut -d. -f2|rev|sort|uniq -c|sort -nr

统计/etc/init.d/functions文件中每个单词的出现次数,并排序(用grep和sed两种方法分别实现)

cat /etc/init.d/functions | egrep -o  "\<[a-zA-Z]{2,}\>"|sort|uniq -c |sort -ncat /etc/init.d/functions | egrep -o  "\<[a-zA-Z]{2,}\>"|sort|uniq -c |sort -n 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!