Shell正则表达式之grep、sed、awk实操笔记

2019-09-23 09:36:01丽君

表示搜寻(gd)或(god)或(god)字符串,|代表或
()    表示找出群组字符串
范例:egrep 'g(la|oo)d' regular_express.txt
表示搜寻(glad)或(good)字符串
()    +表示找出多个重复群组的判别
范例: echo 'AxyzxyzxyzxyzxyzC'|egrep 'A(xyz)+C'
表示搜寻开头是A结尾是C,中间有一个以上的'xyz'字符串

sed:

插入:

1.将/etc/passwd 的内容列出并打印行号,同时,将2-5行删除显示
# nl /etc/passwd | sed '2,5d'
注: sed是sed -e的简写, 后接单引号
同上删除第2行
# nl /etc/passwd | sed '2d'
同上删除第三行到最后一行
# nl /etc/passwd | sed '3,$d'

2.在第二行后加上一行test

# nl /etc/passwd | sed '2a test'
在第二行前加上一行test
# nl /etc/passwd | sed '2i test'
在第二行后加入两行test
# nl /etc/passwd | sed '2a test
> test'

替换行:

3.将2-5行内容取代为 No 2-5 number

# nl /etc/passwd | sed '2,5c No 2-5 number'

4 列出/etc/passwd 内第5-7行
# nl /etc/passwd |sed -n '5,7p'

替换字符串:

sed 's/被替换字符串/新字符串/g'

1.获取本机IP的行
# /sbin/ifconfig eth0 |grep 'inet addr'
将IP前面的部分予以删除
# /sbin/ifconfig eth0 |grep 'inet addr'| sed 's/^.*addr://g'
将IP后面的部分删除
# /sbin/ifconfig eth0 |grep 'inet addr'| sed 's/^.*addr://g'| sed 's/Bcast:.*$//g'
-------------------
192.168.100.74
-------------------

2.用grep将关键词MAN所在行取出来
# cat /etc/man.config |grep 'MAN'
删除批注行
# cat /etc/man.config |grep 'MAN'| sed 's/^#.*$//g'
删除空白行
# cat /etc/man.config |grep 'MAN'| sed 's/^#.*$//g'| sed '/^$/d'

3.利用sed将regular_express.txt内每一行若为.的换成!
注:-i参数会直接修改文本,而并非直接输出
# sed -i 's/.*.$/!/g' regular_express.txt

4.利用sed在文本最后一行加入 #This is a test
注: $代表最后一行 a代表行后添加
# sed -i '$a #This is a test' regular_express.txt
将selinux配置文件enforcing改成disabled
# sed -i '6,6c SELINUX=disabled' /etc/selinux/config
延伸正规表示法:
# grep -v '^$' regular_express.txt |grep -v '^#'
延伸写法:
# egrep -v '^$'|'^#' regular_express.txt

1. +表示重复一个或一个以上的前一个RE字符

例如:egrep -n 'go+d' regular_express.txt
普通写法: grep -n 'goo*d' regular_express.txt

2. ?表示重复零个或一个前一个RE字符

例如: egrep -n 'go?d' regular_express.txt