Linux之shell文本处理工具(grep,sed,awk)

4 篇文章 0 订阅

1.grep

grep

grep -E = egrep

grep 匹配条件 处理文件

  • grep str file#过滤str关键字
  • grep ^str file##以str开头
  • grep str$ file##以str结尾
  • grep -i str file##忽略大小写
  • grep -E "\<str" file##str字符之前不能有字符
  • grep -E "str\>" file##str字符之后不能有字符
  • grep -数字 ##显示过滤行以及上面x行和下面x行
  • grep -n ##显示匹配的行所在行号
  • grep -A ##显示过滤行以及下面几行
  • grep -B ##显示过滤行以及上面几行
  • grep -v ##反向过滤

grep字符数量匹配规则

  • ^str ##以str开头
  • str$ ##以str结尾
  • a....b ##a开头b结尾中间4个任意字符
  • .....s ##s结尾前面5个任意字符
  • * ##字符出现0到任意次
  • ? ##0到1次 
  • + ##1到任意此
  • {n} ##n此
  • {m,n} ##m到n次
  • {0,n} ##0-n次
  • {,n} ##0-n次
  • {m,} ##最少m次
  • (hi){2} ##hi字符串出现2次

练习:请显示系统中能被su命令切换的用户名称

vim usershow.sh 

 

2. sed 命令

命令格式:

  • sed 参数 命令 处理对象
  • sed 参数 处理对象 -f 处理规则文件

对字符的处理 :

p     ##显示

  • sed -n  5p file          ##显示第五行
  • sed -n  3,5p file       ##显示3到5行
  • sed -ne  "3p;5p file  ##显示3和5行
  • sed -ne 1,5p file       ##1-5行
  • sed -ne '5,$p' file      ##5到最后以行
  • sed -n '/^#/p' file##显示以#开头的行

d     ##删除

  • sed 5d file##删除第五行
  • sed '/^#/d' file##把#开头的行删除
  • sed '/^#/!d' file###删除#开头以外的行 

 
a     ##添加

  • sed -e '$a hello world' file
  • sed -e '$a hello\nworld' file
  • sed -e '/^#/a hello world' file

c     ##替换

  • sed -e '/^#/c hello world' file
  • sed '5chello world' file

w               ##把符合的行写到指定文件中

  • sed '/^#/w myfile' file     ##把file中#开头的行写入myfile中

i      ##插入

  • sed '5ihello' file

r ##整合文件

  • sed '5r haha' file

 
 
sed 字符替换(规则类似vim里面的替换)

  • sed 's/:/###/g' file 
  • sed 's/:/###/' file
  • sed '1,5s/:/###/g' file
  • sed '1s/:/###/g' file
  • sed '1s/:/###/g;5s/:/###/g' file
  • sed '/lp/,/shutdown/s/:/###/g' file
  • sed 's/\//####/g' file
  • sed 's@/@####@g' file
  • sed 's@/@####@g' -i  file  ##把sed处理的内容保存到file文件中

练习:编写Apache_port.sh脚本

脚本后 接数字 http的端口就改为此数字

假设selinux为关闭状态

 

3. awk

awk -F 分隔符 BEGIN{}{}END{} FILENAME

  • NR          #行数
  • NF          #列数
  • FILENAME     #文件名称本身
  • str      ##str变量值
  • “str”    ##str字符串
  • /bash$/                 #条件
  • /条件1|条件2/       #条件1或条件2
  • /条件1/||/条件2/    #条件1或条件2
  • /条件1/&&/条件2/ #条件1且条件2
  • $0 #所有的列
  • $1 #第一列
  • $2 #第二列
  • $3 #第三列

 

练习:统计在系统中能su切换的并且用户家目录不在/home下的用户数量

awk -F : '$6!~/home/&&/bash$|sh$|tcsh$|csh$/{print}' /etc/passwd


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值