linux三剑客之grep,sed,awk常用命令
标签搜索

linux三剑客之grep,sed,awk常用命令

mrui
2024-01-29 / 0 评论 / 54 阅读 / 正在检测是否收录...

find命令

find命令用于查找文件,可以按照文件类型,文件名称,文件大小,修改日期等条件进行查找,功能非常强大。
格式: find [目录] [条件]
常用条件示例:

  • type 类型(f文件,d目录,l快捷方式(链接),)
  • name 文档名称
  • size 文件大小(k,M,G)(+:大于;-:小于)
  • user 用户名
  • mtime 文件修改时间

常用命令如下;

#-type  类型
find    /opt     -type    d
#-name  文档名称
find    /etc    -name    "passwd"
find    /etc     -name    "*.conf"
#-size 文档大小
find   /boot/    -size  +10M    -size  -50M
#-user  用户名 (按照数据的所有者)
find    /      -user    zhangsan
#-mtime  修改时间
find  /root  -mtime  +90 # 三个月前的数据

find高级用法(exec添加额外处理命令)

find  [范围]  [条件]  -exec  处理命令  {}   \;

-exec额外操作的开始
{} 永远表示前面find查找的结果
\; 额外操作的结束

find /boot -size +10M -exec  cp  {}  /mnt  \;
#将查找到的大于10M的文件拷贝到/mnt目录下

1.grep

作用:在文本文件内容中,过滤包含指定字符串的行
格式: grep [选项] '字符串' 文本文件
常用命令选项:
-v:取反匹配
-i:忽略大小写
此外,在写需要过滤的字符串条件时,^word表示以字符串word开头,$word表示以字符串word结尾。^$组合起来表示空行。
示例:

grep -v  ^$  /etc/default/useradd
#输出的内容将不包含空行

lryqeuu4.png

2.sed流式编辑器

作用:对文档进行非交互式增删改查,逐行处理。
用法:

  • 前置指令 | sed 选项 条件 指令
  • sed 选项 条件 指令 被处理文档
    选项
  • -n 屏蔽默认输出
  • -r 支持扩展正则
  • -i 修改源文件
    指令
  • p 输出(打印)
  • d 删除
  • s 替换
  • a 行下追加
  • i 行上添加
  • c 整行替换
    特殊符号说明:
    $:代表最后一行
    =:表示行号
    $=:最后一行的行号
    示例:

    sed -n  '2,4p'  user    //输出2~4行
    sed -n  '2p;4p'  user   //输出第2行与第4行
    sed -n '3,+1p' user    //输出第3行以及后面1行
    sed -nr '/^root|^bin/p' user   //输出以root或bin开头的行,|是扩展正则,需要r选项
    sed -n '1!p' user   //输出除了第1行的内容,!是取反
    sed -n '$p'  user  //输出最后一行
    sed -n '='  user   //输出行号,如果是$=就是最后一行的行号
    sed -n '$='  user   //输出最后一行的行号
    sed  '3,5d'  abc.txt #删除第3~5行   
    sed  '/xml/d'   abc.txt #删除所有包含xml的行
    sed  '/xml/!d'   abc.txt #删除不包含xml的行   
    sed  '/^install/d'   abc.txt #删除以install开头的行
    sed '$d' abc.txt #删除文件的最后一行
    sed  '/^$/d'  abc.txt  #删除所有空行
    
    sed 's/2017/6666/' shu.txt   //把所有行的第1个2017替换成6666
    sed 's/2017/6666/2' shu.txt  //把所有行的第2个2017替换成6666
    sed '1s/2017/6666/' shu.txt  //把第1行的第1个2017替换成6666
    sed '3s/2017/6666/3' shu.txt  //把第3行的第3个2017替换成6666
    sed 's/2017/6666/g' shu.txt   //所有行的所有个2017都替换
    sed '/2024/s/2017/6666/g' shu.txt   //找含有2024的行,将里面的所有2017替换成6666
    #把 /bin/bash 替换成 /sbin/sh 
    sed 's!/bin/bash!/sbin/sh!' user   //最佳方案,更改s的替换符
    
    sed 'a 666' user    //所有行的下面追加666
    sed '1a 666' user   //第1行的下面追加666
    sed '/^bin/a 666' user   //在以bin开头的行的下面追加666
    sed 'i 666' user  //所有行的上面添加666
    sed '5i 666' user   //第5行的上面添加666
    sed '$i 666' user  //最后1行的上面添加666
    sed 'c 666' user   //所有行都替换成666
    sed '1c 666' user  //替换第1行为666
    

3.awk

作用:可以实现精确搜索并输出 ,逐行处理
用法:

  • 前置指令 | awk 选项 条件 指令
  • awk 选项 条件 指令 被处理文档

选项
 -F:定义分隔符
指令
 print:打印
条件
 /字符串/
内置变量
 $1 第一列 $2 第二列 $3 第三列
 $0 所有列 NR 行号 NF 列号

示例:

awk '/to/{print}' abc.txt    //输出有to的那行
awk '/to/{print $1}' abc.txt    //输出有to的那行的第1列
awk '{print $0}' abc.txt    //输出所有行所有列
awk '{print NR,NF}' abc.txt   //输出所有行的行号,列号(有几列)
awk '/^bin/{print NR,$0}'  user   //找以bin开头的行,显示该行的行号,改行所有列
awk -F: '$6~/root/{print}'  user  //输出第6列包含root的行
awk -F: '$6!~/bin/{print}'  user  //输出第6列不包含bin的行
awk -F: '$3<=3{print}' user   //输出第3列小于等于3的行
awk -F: 'NR>2{print}' user    //输出行号大于2的行
awk -F: 'NR==2||NR==4{print}' user   //找行号是2或者4的行
如果只有一个条件满足就显示一个
awk -F: '$7~/bash/&&$3<=500{print}' user   //找第7列包含bash并且第3列
小于等于500的行

任务就是{print}的话可以省略不写

awk -F: '$1=="root"' user  //找第1列完全等于root的行多一个字符少一个字符都不行,比较严格的搜索方式

运算

awk 'NR%2==0{print NR,$0}' user   //在条件中使用运算,找到将行号除以2余数等于0的行,然后输出该行的行号和所有列,相当于输出偶数行

awk处理时机,可以执行额外任务
BEGIN任务 执行1次,读取文档之前执行
逐行任务 执行n次,读取文档时执行
END任务 执行1次,读取文档之后执行

awk -F: 'BEGIN{print "ok"}{print $1}END{print "ok"}' user
awk -F: 'BEGIN{print "User\tUID\tHome"}{print $1"\t"$3"\t"$6}END{print "总计"NR"行"}' user  

awk数组

awk '{ip[$1]++}END{for(i in ip){print i,ip[i]}}' /var/log/httpd/access_log | sort  -nr  -k  2    
//使用sort命令增加排序功能,-n是以数字形式排序,-r是降序, -k是指定为第几列排序
0

评论

博主关闭了当前页面的评论