十七. 正则以及grep ,sed,awk的简单应用

一.正则表达式:/ /
grep,sed,awk 都能解释正则表达式


正则表达式:把一些特殊符号组合到一起描述字符和字符串的方法。
^ 以什么开头 grep '^root' /etc/passwd
$ 以什么结尾 如能登入系统的所有用 grep ‘bash$’/etc/passwd
. 任意一个字符 grep '^b.n' /etc/passwd 过滤取到bin的
.* 所有字符
* 代表前面的字符有0个或者无穷个 grep 'b*' /
+ 必须用egrep 或 egrep -E ‘ab+’表示前面的字符有一个或者无穷个
{}  'ab{n}’前面的字符有n个  控制前面字符个数{3} 前面字符的个数为3
? ‘ab?’前面字符出现0次或1次 前面的字符为b 不是ab
[]  [yan] 只取里面的一个y[asdd]n  yan ysn ydn yasn 可以取到yan ysn ydn
[^]中括号里面的取反
^[^] 非字符组的字符开头的行
[a-z]所有的小写字母
[A-Z]所有的大写字母
[a-zA-Z]所得大小写字母
[123-]去123其中的一个或 ‘-'
-必须放在后面
二.grep
grep 命令:
grep -n 显示匹配所在行
-q  静默模式
-l  打印文件名
-A n 打印后几行
-B n 打印前几行
-C n 前几行和后几行
-o 只显示匹配的内容
-c 匹配成功的行数
-E ==egrep
-i 忽略大小写,全部抓取
-v 取反抓取,过滤  不匹配这几行,过滤到其他
-w 过滤单词全部的内容

三.sed 流编辑器
sed包括两部分  第一部分为定位到行,其次是正则定位
sed -r '定位+操作'
-n  静默模式  默认的输出不打印出来
-e  可以指定多个规则
-i  将内容写到文件里面并且打印出来
-f  将内容写到指定文件里
命令:
d=del 删除 sed '2d' 文件名  删除文件的第二行并打印出来,源文件不修改
p=print 打印 sed'2p' 打印第二行
c=change 修改 sed'2c 111111' 将第二行改成111111
a=append 追加 sed'2a 11111 ' 在第二行后面追加11111
i=inset 插入 sed '2i 11111'在第二行前一行插入11111
s=substation 替换 sed 's/a/b/g’ 把所有的a换成b   g代表这行当中所有都改,不加只改第一个a
sed 正则定位
sed '/正则表达式/命令’目标文件
sed ' ; ' 目标文件  两个命令一起执行
sed -r 's///' s命令修改部分内容

四.awk

awk 可以处理格式明显的文本
awk -F  指定分隔符
如:
--awk -F: ‘{print $n}’/ect/passwd 取用户配置文件的:前面的n个并打印出来
--awk -F: ‘{print $n,NF}’/ect/passwd 取用户配置文件的:前面的n个并打印出来 并且打印出有几段
--awk -F: ‘{print $n,$NF}’/ect/passwd 取用户配置文件的第n段和最后一段并且显示出来
--awk -F: ‘{print $n,NR}’/ect/passwd 取用户配置文件的第n段并且显示行号
&0 取所有   NF 代表以:为分隔符的有几段   NR表示显示行号:
NR==1 表示定位
--awk -F: ‘NR==1{print $n}’/etc/passwd 取用户配置文件的第一行的第N段
--awk -F: 'NR<=3{print NR,"aaaaaa",$1,NF}' /etc/passwd 取用户配置文件的前三行的第一段,并且显示行号,行内以:分割的有几段
--awk -F: '3<=NR&&NR<=5{print NR,"aaaaaa",$0,NF}' /etc/passwd 用户配置文件的3-5行的
--awk -F: 'NR<=2||NR>=5{print NR,"aaaaaa",$0,NF}' /etc/passwd 用户配置信息的第二行之前的,第7行之后的
--awk -F: '/nologin$/{print $1}' /etc/passwd
--awk -F: '$1~/^r.*t$/{print $3,$1}' /etc/passwd 取用户配置文件的第一段的以r开头t结尾的第3段和第一段
--{     count=n   定义一个变量
 awk -v x=$count -F: ‘$3 >= x{print $1}’/etc/passwd
  } 取用户配置信息的UID>n的第一段并且打印出来 


其他常用命令的补充:
--cat a.txt |sort |uniq 排序并且去重a.txt的文件内容
--cut命令  cat a.txt |cut -d: -f1,3 取a.txt 以:为分隔符的第一段和第三段
--find命令 find / -type f
                  -name "* .txt" 根目录下以txt文件为结尾的文件
                  -size +30M  大于30M的文件
                  -size +10M -size -30M 大于10M小于30M的文件

原文地址:https://www.cnblogs.com/njzy-yuan/p/6869856.html