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绝对路径:
DAY4

-c显示行数,查看passwd有多少行:

-n显示行号,显示passwd每行行号:

DAY4

-i不区分大小写,不区分大小写,将任意一行nologin改成大写:

grep -ni ‘nologin’ passwd

-v取反,显示不带nologin的行,并且反向取行

grep -nvi ‘nologin’ passwd
DAY4

-r 遍历所有子目录、孙目录;不加-r,只能显示文件:

grep -r root /etc/
DAY4

-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

DAY4

^#表示以#号开头的行,过滤出以#号开头的行,并显示行号:
DAY4

过滤出不以#号开头的行

grep -vn ‘^#’ passwd

^在中括号里面表示取反,在外面表示以什么开头

'[^0-9]'表示非纯数字的行,过滤出非纯数字的行

DAY4

'[0-9]'表示非数字开头的行,过滤出非数字开头的行:

grep ‘[0-9]’ inittab
DAY4

3、greo/egrep示例

‘r.o’ . 表示任意的一个字符,过滤出带r.o的行

DAY4

'oo’ * 表示号左边的字符重复0到n次,过滤出带’o*o’的行:

DAY4

'.*'表示任意个任意字符,显示所有行

'o{2}'表示两个o,过滤出带两个o的行

grep ‘o{2}’ passwd

'o+o’表示加号前面有一个或多个o

DAY4

'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
DAY4

-r表示褪意

sed -n '/o+t/'p test

sed -nr '/o+t/'p test
DAY4

过滤出指定的行

sed -n '2’p test

过滤出2到5行

sed -n '2,5’p test
DAY4

过滤出15行到最后一行

sed -n '15,$'p test

-e可以同时写多个表达式

sed -e '1’p -e '/bus/'p -n test
DAY4

4、sed(下)

'/bus/'IP过滤出带bus的行,I表示不区分大小写

sed -n '/bus/'Ip test

去掉1到15行,显示后面的行,d表示不显示

sed '1,15’d test
DAY4

-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:&/’

相关文章:

猜你喜欢
  • 2021-04-01
  • 2021-05-02
相关资源
相似解决方案