码迷,mamicode.com
首页 > 系统相关 > 详细

shell学习之正则表达式

时间:2018-10-23 20:55:00      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:txt   源文件   使用   etc   pass   之间   cront   roo   文件的   

一、grep使用
...
语法: grep [-cinvABC] ‘word‘ filename

-c :打印符合要求的行数

-i :忽略大小写

-n :在输出符合要求的行的同时连同行号一起输出

-v :打印不符合要求的行

-A :后跟一个数字(有无空格都可以),例如 –A2则表示打印符合要求的行以及下面两行

-B :后跟一个数字,例如 –B2 则表示打印符合要求的行以及上面两行

-C :后跟一个数字,例如 –C2 则表示打印符合要求的行以及上下各两行
...
grep -n ‘root‘ /etc/passwd
过滤出带关键字root的行并输出行号
grep -nv ‘root‘ /etc/passwd
v是取反的意思
过滤出不带关键字root的行并输出行号
...
grep ‘^[^a-zA-Z]‘ test.txt
[^]表示不在这个范围内的
^代表以后面的开头的
...
grep -v ‘^#‘ /etc/crontab |grep -v ‘^$‘
正则中^表示以什么开头的行,^$表示以什么结尾的行
‘^$‘可以表示空行
...
grep ‘r..o‘ /etc/passwd
.代表一个任意字符
上例中,就是把符合r与o之间有两个任意字符的行过滤出来
...
grep ‘ooo‘ /etc/passwd
ooo
表示o或oo或ooo或更多的o,代表任意个
...
grep ‘.
‘ /etc/passwd |wc -l
‘.‘表示0个过着多个任意字符
空行也包含在内
...
grep ‘o{2}‘ /etc/passwd
过滤出现‘oo‘的行
花括号 { 和 } 的左边都需要加上转义字符 ‘\‘,
{}里还可以写成{n1,n2}的形式,
大于n1小于n2次的,
n2可以为空,表示大于等于n1次的
...
二、sed使用
sed -n ‘2‘p /etc/passwd
p是print打印的意思
单引号内的 ‘2‘表示第几行
sed -n ‘1,$‘p /etc/passwd
这样表示打印所有的行
sed -n ‘2,4‘p /etc/passwd
这样表示一个区间,第二行到第四行
...
sed -n ‘/root/‘p test.txt
表示打印含有字符串root的行
grep中的
$ . ^ 同样可以使用
sed -n ‘/ooo/‘p test.txt
...
sed -e ‘1‘p -e ‘/111/‘p -n test.txt
-e可以实现多个行为
打印第一行和包含111的行
...
sed ‘1‘d test.txt
sed ‘/root/‘d test.txt
sed ‘1,3‘d test.txt
删除某行或包含某字符的行或多行
...
sed ‘1,2s/ot/to/g‘ test.txt
用to替换1到2行的ot
s为替换的意思,g是全局的意思,
如果不加 ‘g’ 只换该行中出现的第一个
/分隔符也可以换成其他特殊字符如# @

sed ‘1,3s@to@ot@g‘ test.txt
...
sed ‘s/[0-9]//g‘ test.txt
替换所有的数字
sed -e ‘s@[1-9]@@g‘ -e ‘s/[a-zA-Z]//g‘ test.txt
tihua替换所有的数字和字母
...
sed ‘s@(rot)(.)(bash)@\3\2\1@‘ test.txt
此题可把rot对应着3,rot与bash中间的字符对应着2,bash对应着1
然后把它们按照123的顺序排列出来。
例如test.txt原来里的内容为rot:123:bash
命令执行后输出bash:123:rot
...
sed ‘s/^.
$/123&/‘ test.txt
匹配任意字符开头任意字符结尾的行,并把行首字符替换为123
加上&不覆盖原行内容
...
sed -i ‘s/ro/to/g‘ test.txt
直接修改源文件的内容

shell学习之正则表达式

标签:txt   源文件   使用   etc   pass   之间   cront   roo   文件的   

原文地址:http://blog.51cto.com/13670314/2308032

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!