Linux命令2.grep,sed,awk

grep  文本过滤

-v(--invert-match)  取反

-i(--ignore-case)  忽略大小写

-c(--count)统计匹配行数

-m(--max-count=NUM )设置最大过滤次数

-q(--quiet)静默输出,一般用于监测,看$?返回值,0匹配,否则不匹配

--color 标红匹配字符串

-E(--extended-regexp) 支持扩展正则

# grep '^r' /etc/passwd  #过滤出/etc/passwd文件中以r开头的内容

#grep -E '^(root|daemon)' /etc/passwd #过滤出/etc/passwd文件中以root和deamon开头的内容

#egrep '^(root|daemon)' /etc/passwd #过滤出/etc/passwd文件中以root和deamon开头的内容

(“I”符号为扩展正则中的“与”;因为grep -E与egrep命令效果一致,所以实际使用中,涉及到扩展正则时,通常使用egrep命令,而非grep命令)

# grep '^192.168.4.4' /etc/hosts && echo "YES" || echo "NO"

#过滤出/etc/hosts文件中以192.168.4.4开头的内容,若果有则输出YES否则输出NO

192.168.4.4 svr5.tarena.com svr5

YES

# grep -q '^192.168.4.4' /etc/hosts && echo "YES" || echo "NO"

#判断/etc/hosts文件中是否有以192.168.4.4开头的内容,若果有则输出YES否则输出NO

YES

# egrep -v  '^#' /etc/inittab  #输出/etc/inittab文件里的非注释内容(#开头的内容为注释行)

# egrep -m10 '/sbin/nologin$' /etc/passwd  #统计本地用户中登录Shell为“/sbin/nologin”的用户个数(-m10表示最多过滤前十个有效用户)

# egrep -c '/bin/bash$' /etc/passwd  #统计使用“/bin/bash”作为登录Shell的正常用户个数

24

# egrep '/bin/bash$' /etc/passwd | wc -l  #统计使用“/bin/bash”作为登录Shell的正常用户个数

24

sed文本处理工具

选项

-n(屏蔽默认输出,默认sed会输出读取文档的全部内容)

-r(让sed支持扩展正则)

-i(sed直接修改源文件,默认sed只是通过内存临时修改文件,源文件无影响)

指令

p 输出(print)

d 删除(delete)

s 替换(separate)

a 追加(add)

i 插入(insert)

c 替换行

正常情况下,sed命令所做的处理只是把操作结果(包括打印、删除等)输出到当前终端屏幕,而并不会对原始文件做任何更改,若希望直接修改文件内容,应添加选项 -i 。

# sed 'd' /etc/passwd  #显示删除所有行的结果

# sed -i '1,4d' /etc/passwd   #直接删除/etc/passwd的第1~4行

# sed '$d' /etc/passwd #删除最后一行

# sed '/^$/d' /etc/passwd #删除所有空行

# sed -n '3p' /etc/passwd #显示第三行

# sed -n '1~2p' /etc/passwd #显示奇数行

# sed -n ‘2~2p' /etc/passwd #显示偶数行

# sed -n '/root/p' /etc/passwd #显示包含root的行

# sed -n '/bash$/p' /etc/passwd #显示bash结尾的行

# sed -n 'p' /etc/passwd  #显示所有行

#sed -n '$=' /etc/passwd #输出文件行数

# sed 's/xml//g'  /etc/passwd #删除文件中所有xml(替换为空)

# sed '4,7s/^/#/' /etc/passswd #将4~7行所有内容注释掉

# sed 's/^#an/an/' /etc/passwd #将文件中所有以#an开头的注释行取消注释

# sed '2a XX' a.txt          #在第二行后面,追加XX

# sed '2i XX' a.txt           #在第二行前面,插入XX

# sed '2c XX' a.txt          #将第二行替换为XX

# sed -i '$a 192.168.4.5 svr5.tarena.com svr5' /etc/hosts #追加域名

awk文本处理

格式:awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file

 [-F|-f|-v]   大参数,-F指定分隔符,-f调用脚本,-v定义变量 var=value

'  '          引用代码块

BEGIN   初始化代码块,在对每一行进行处理之前,初始化代码,主要是引用全局变量,设置FS分隔符

//           匹配代码块,可以是字符串或正则表达式

{}           命令代码块,包含一条或多条命令

;          多条命令使用分号分隔

END      结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息

特殊要点:

$0           表示整个当前行

$1           每行第一个字段

NF          字段数量变量

NR          每行的记录号,多文件记录递增

FNR        与NR类似,不过多文件记录不递增,每个文件都从1开始

FS          BEGIN时定义分隔符

# awk '{print $1,$3}' test.txt  #打印文档第1列和第3列

#awk -F: '{print $1,$3,$6}' OFS="\t" /etc/passwd        #输出字段1,3,6,以制表符作为隔符

#awk -F: '{print NF}' helloworld.sh                                  #输出文件每行有多少字段

#awk -F'[:#]' '{print $1,$2,$3,$4,$5,$6,$7}' OFS='\t' helloworld.sh   #制表符分隔输出多字段

# awk -F: '/root/' /etc/passwd  #输出包含root的行

# awk -F: '/bash$/{print}' /etc/passwd #输出以bash结尾的行

# awk -F: 'NR==3{print}' /etc/passwd #输出第3行(行号NR等于3)的用户记录

# awk -F: '$3>10 && $3<20' /etc/passwd  #输出账户UID大于10并且小于20的账户信息

# seq 200 | awk '$1%3==0' #找200以内3的倍数

# df -h | awk '{print $4}'       #打印磁盘的剩余空间

# ifconfig eth0 | awk '/RX p/{print $5}' #过滤接收数据的流量

# awk '/Failed/{print $11}' /var/log/secure #根据/var/log/secure日志文件,过滤远程连接密码失败的IP地址

#s -l /home|awk 'BEGIN{sum=0} !/^d/{sum+=$5} END{print "total size is:",sum/1024,"KB"}' #计算/home目录下,普通文件的大小,使用KB作为单位

# awk -F: 'BEGIN{print "User\tUID\tHome"}  {print $1 "\t" $3 "\t" $6}  END{print "Total",NR,"lines."}' /etc/passwd  #格式化输出passwd文件内容时,要求第一行为列表标题,中间打印用户的名称、UID、家目录信息,最后一行提示一共已处理文本的总行数

# awk 'BEGIN{a[0]=0;a[1]=11;a[2]=22; for(i in a){print i,a[i]}}'    #数组运算

0  0

1 11

2 22

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值