shell学习之正则表达式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell学习之正则表达式相关的知识,希望对你有一定的参考价值。
一、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,[email protected]@[email protected]‘ test.txt
...
sed ‘s/[0-9]//g‘ test.txt
替换所有的数字
sed -e ‘[email protected][1-9]@@g‘ -e ‘s/[a-zA-Z]//g‘ test.txt
tihua替换所有的数字和字母
...
sed ‘[email protected](rot)(.)(bash)@32[email protected]‘ 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学习之正则表达式的主要内容,如果未能解决你的问题,请参考以下文章