正则

正则
正则就有一串有规律的字符串
掌握好正则对于编写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全局

Awk工具
awk -F ':' '{print $1,$2}' text.txt 用法 $0打印所有
忽略F的时候 以空格为分隔符
awk '/roo/' test.txt 匹配
awk -F ':' '$1 ~ /oo/' text.txt 第一段为oo
awk -F ':' '{OFS="#"} {print $1,}' test.txt
OFS符号
NRhang
NF段

head -n2 test.txt|awk -F ':' '{print $1}' //以:分割 打印第一段
head -n2 test.txt|awk -F ':' '{print $0}' //以:分割打印所有
awk -F ':' '{print $1"#"$2"#"$3"#"$4}' //以:分割打印1234段并且以#分割
awk '/oo/' test.txt //匹配含有oo的行
awk -F ':' '$1 ~/oo/' test.txt //以:分割打印第一段等于oo的行
awk -F ':' '/root/ {print $1,$3} /test/ {print $1,$3}' test.txt //匹配root 打印第一三段 匹配test打印 第一三段
awk -F ':' '$3=="0"' /etc/passwd //以:分割打印第三段等于0的
awk -F ':' '$3>="500"' /etc/passwd //以:分割打印第三段大于等于"500"的
awk -F ':' '$3>=500' /etc/passwd //以:分割打印第三段大于等于500的
awk -F ':' '$7!="/sbin/nologin"' /etc/passwd //以:分割打印第七段等于/sbin/nologin的
awk -F ':' '$3<$4' /etc/passwd //打印第三段小于第四段的
awk -F ':' '$3>"5" && $3<"7"' /etc/passwd //打印第三段大于字符串5且第三段小于字符在7的
awk -F ':' '$3>1000 || $7=="/bin/bash"' /etc/passwd //打印第三段大于1000或第七段等于/bin/bash的
head -5 /etc/passwd |awk -F ':' '{OFS="#"} {print $1,$3,$4}‘ //打印134段以#分割开来
awk -F ':' '{OFS="#"} {if ($3>1000) {print $1,$2,$3,$4}}' /etc/passwd //第三段大于1000的,打印地1234段用#分割开来
head -n3 /etc/passwd | awk -F ':' '{print NF}‘ //打印段
head -n3 /etc/passwd | awk -F ':' '{print NR}‘ //打印行
awk 'NR>40' /etc/passwd //打印行号大约40的
awk -F ':' 'NR<20 && $1 ~ /roo/' /etc/passwd //打印行号小于20且第一段匹配为root的
head -n 3 /etc/passwd |awk -F ':' '$1="root"‘ //前三行中打印第一段为root的行
awk -F ':' '{(tot=tot+$3)}; END {print tot}' /etc/passwd //计算第三段的总和
awk -F ':' '{if ($1=="root") {print $0}}' /etc/passwd //第一段为root的打印所有

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值