1、正则介绍_grep(上)
grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来
创建grep目录:
mkdir grep
进入greo目录:
cd grep/
拷贝passwd到当前目录:
cp /etc/passwd .
在passwd文件中过滤出带nologin的行:
grep ‘nologin’ passwd
查看grep绝对路径:
-c显示行数,查看passwd有多少行:
-n显示行号,显示passwd每行行号:
-i不区分大小写,不区分大小写,将任意一行nologin改成大写:
grep -ni ‘nologin’ passwd
-v取反,显示不带nologin的行,并且反向取行
grep -nvi ‘nologin’ passwd
-r 遍历所有子目录、孙目录;不加-r,只能显示文件:
grep -r root /etc/
-A后面跟数字,过滤出符合要求的行以及下面的n行:
-B后面跟数字,过滤出符合要求的行以及上面的n行:
-C后面跟数字,过滤出符合要求的行以及上下的n行:
2、grep(中)grep的正则表达
过滤出带数字的行:
grep ‘[0-9]’ passwd
[0-9]表示零到九,过滤出不带数字的行:
grep -v ‘[0-9]’ passwd
grep -vn ‘[0-9]’ /etc/inittab
^#表示以#号开头的行,过滤出以#号开头的行,并显示行号:
过滤出不以#号开头的行
grep -vn ‘^#’ passwd
^在中括号里面表示取反,在外面表示以什么开头
'[^0-9]'表示非纯数字的行,过滤出非纯数字的行
'[0-9]'表示非数字开头的行,过滤出非数字开头的行:
grep ‘[0-9]’ inittab
3、greo/egrep示例
‘r.o’ . 表示任意的一个字符,过滤出带r.o的行
'oo’ * 表示号左边的字符重复0到n次,过滤出带’o*o’的行:
'.*'表示任意个任意字符,显示所有行
'o{2}'表示两个o,过滤出带两个o的行
grep ‘o{2}’ passwd
'o+o’表示加号前面有一个或多个o
'o?t’问号表示,问号前面字符出现零次或1次
'root|nologin’表示匹配root或者nologin
egrep ‘root|nologin’ passwd
4、sed(上)
sed(主要有替换功能)
创建sed目录
mkdir sed
拷贝passwd到当前目录,重命名为test
cp …/grep/passwd test
过滤出带root的行,’//'固定格式,-p打印所有,-n过滤有关行
sed -n '/root/'p test
-r表示褪意
sed -n '/o+t/'p test
sed -nr '/o+t/'p test
过滤出指定的行
sed -n '2’p test
过滤出2到5行
sed -n '2,5’p test
过滤出15行到最后一行
sed -n '15,$'p test
-e可以同时写多个表达式
sed -e '1’p -e '/bus/'p -n test
4、sed(下)
'/bus/'IP过滤出带bus的行,I表示不区分大小写
sed -n '/bus/'Ip test
去掉1到15行,显示后面的行,d表示不显示
sed '1,15’d test
-i表示删除 删除1到15行
删除user2相关的行
sed -i '/user2/'d test
把test文件1到10的root全部替换成toor,s表示替换的关键词,g表示全局替换
sed ‘1,10s/root/toor/g’ test
把1到10行的ro+替换成r,head只显示1到10行,-r表示褪意,s是替换关键词
sed -r ‘1,10s/ro+/r/g’ test |head
替换以:为分隔符的第一行后最后一行。[^:]表示非:的字符,+表示匹配一个或多个字符,()表示命令组,前面用小括号扩起来的,后面要用\数字表示它。3表示第三段,2表示第二段,1表示第一段。
head test |sed -r ‘s/([:]+)?.*)?[:]+)/\3:\2:\1/’
把/root换成123
head test |sed ‘s//root/123/g’
把文档里面的所有英文字符删除掉,[a-zA-Z]表示所有字母
head test |sed ‘s/[a-zA-Z]//g’
把所有行前面加上aaa,(.)表示一整行,&表示(.)
head test |sed -r ‘s/(.*)/aaa:&/’