正则
正则就有一串有规律的字符串
掌握好正则对于编写shell脚本有很大的帮助
各种编程语言都有正则,原理是一样的
下面主要学习 grep egrep sed awk
grep
grep[-cinvABC] 'word' filename
-c 行数
-i 不区分大小写
-n显示行号
-v 取反
-r 遍历所有的子目录
-A后面跟数字,过滤出符合要求的行以及下面的n行
-B同上 过滤出符合要求的行以及上面的n行
-C 同上过滤出符合要求的行以及上下的n行
-E 或者 egrep
r.o .表示任意的一个字符
ro 表示任意多个字符 左边的字符重复0到n次
r+o +表示+前面1次或者多次 +左边一次和多次
r?0 ?表示前面0或者1
?< . < + < 个人理解
| 表示或者
grep -n 'root' /etc/passwd //过滤含有root的行,显示行号
grep -nv 'nologin' /etc/passwd //过滤出不含有nologin的行,显示行号
grep '[0-9]'/etc/inittab //过滤出含有数字的行 任意一个字符数字
grep -v '[0-9]'/etc/inittab //过滤出不含有数字的行
grep -v '^#' /etc/inittab //过滤不是以#开头的行
grep -v '^#' /etc/inittab|grep -v '^$' //过滤不是以#和$开头的行
grep '^[^a-zA-Z]' test.txt //过滤非字母开头的行
grep 'r.o' test.txt //.表示任意一个字符
grep 'oo' test.txt //前面任意重复0次或多次
grep '.*' test.txt //过滤所有
grep 'o{2}' /etc/passwd //过滤o出现两次的
egrep 'o{2}' /etc/passwd //过滤o出现两次的
egrep 'o+' /etc/passwd //表示+前面1次或者多次
egrep 'oo?' /etc/passwd //?前面0或者1个
egrep 'root|nologin' /etc/passwd //过滤含有root或者还有nologin的行
egrep '(oo){2}' /etc/passwd //过滤出现两个oo的行
sed工具
sed '//' 文件
sed -n '//' 文件 只打印匹配到的 用的比较少
sed -rn '/r+t/' 文件 不用脱义 或者+
sed -n '2'p test.txt 打印第二行
sed -n '2,5'p test.txt 打印第二到第五行
sed -n '1,$'p test.txt 打印所有
sed -e '1'p -e '/111/'p -n test.txt
sed -n '/root/'Ip test.txt +大i 匹配不区分大小写
sed -n '//'d test.txt 删除
sed -i '1,30'd test.txt 删除文件的前三十行
sed -i '//'d text.txt 匹配删除
sed 's//'g 全局替换
sed 's1,10s/root/toor/'g test.txt 范围替换
sed -r 's/([^:]+):(.):([^:]+)/\3:\2:\1/' :前的第一位和最后一位对调
sed 's/[a-zA-Z]//g' 替换空删除不需要的字符
sed -r 's/(.)/aaa:&' 所有行前加固定字符串
sed -n '5'p test.txt //打印第五行
sed -n '1,5'p test.txt //打印第一到第五行
sed -n '1,$'p test.txt //打印全部
sed -n '/root/'p test.txt //匹配含有root的行
sed -n '/^1/'p test.txt //匹配从1开始的行
sed -n '/in$/'p test.txt //匹配以in结尾的行
sed -n '/r..o/'p test.txt //匹配任意两个 ..
sed -n '/oo/'p test.txt //前面重复0或者多次
sed -e '1'p -e '/111/'p -n test.txt //多次匹配
sed '1'd test.txt //删除文章的第一行 原文件的行数不变
sed '1,3'd test.txt //删除文件的第一到第三行,原文件行数不变
sed '/oot/'d test.txt //匹配oot的行然后删除
sed '1,2s/ot/to/g' test.txt //第一行第二行的ot替换成to
sed 's#ot#to#g' test.txt // 脱义或者用其他符号代替 $等
sed 's/[0-9]//g' test.txt //数字的行删除
sed 's/[a-zA-Z]//g' test.txt //字母的行删除
sed -r 's/(rot)(.)(bash)/\3\2\1/' test.txt //bash 和rot对调 用到小括号的 后面用\1 \2 \3等对应
sed 's/^.$/123:&/' test.txt //从开始到结尾 123: &符号的用法
sed -i 's/ot/to/g' test.txt //原文件中to 替换ot全局
来源:https://blog.51cto.com/865516915/2429717