Linux ---> 四剑客awk、sed、grep、find

1、find(查找)

准备一个文件进行测试

[root@k8s-master01 sijianke]# cat test.txt 
#name info

My name is yuchaohui

This is my first script!

192.168.12.100

192.168
find / -name "test.txt"
find /opt/sijianke/ -name "*.txt"
找文件或者目录
#找文件
find /opt/sijianke/ -name "*.txt" -type f
#找目录
find /opt/sijianke/ -name "*.txt" -type d
找30天以前的目录
find /opt/sijianke/ -name "*.txt" -type d -mtime +30
#30天以后的就是-30
find /opt/sijianke/ -name "*.txt" -type d -mtime -30
找到某个文件或者目录后删除/copy等
find /opt/sijianke/ -name "*.txt" -type d -mtime -1 -exec rm -rf {} \;
find /opt/sijianke/ -name "*.txt" -type d -mtime -1 -exec cp -r {} /tmp/ \;
找到某文件大于10k的
#k要用小写的,M要用大写的
find . -name "*.yaml" -type f -mtime +30 -size +10k
练习:把没有权限的文件和目录恢复
find . -type f -exec chmod -R 644 {} \;
find . -type d -exec chmod -R 755 {} \;

2、grep(匹配行)

grep 接正则表达式

查找文件下带有root的行
[root@k8s-master01 ~]# grep "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
#前面加上-n 可以看到在这个文件属于第几行
[root@k8s-master01 ~]# grep -n "root" /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
#找以root开头用^root	,以什么结尾用$ 符号
grep -n "^root" /etc/passwd
查找配置文件去除# 和空行
grep -v "#" values.yaml | grep -v "^$"
匹配ip地址
#egrep "([0-9]{1,3}\.){3}[0-9]{1,3}$" test.txt

[root@k8s-master01 sijianke]# egrep "([0-9]{1,4}\.){3}[0-9]{1,3}$" test.txt
192.168.12.100
#首先用到grep的扩展egrep
#0-9 是匹配0-9的数字
#{1,3} 是匹配1个或者3个之间的个数,ip头2个一般是3个数字组成的
#"([0-9]{1,3}\.){3}" 大括号括起来后面跟上3,就是连续写三次[0-9]{1,3}\.
#[0-9]{1,3}$ 表示以这三个数字结尾的才能匹配到

##对比
[root@k8s-master01 sijianke]# egrep "([0-9]{1,4}\.){3}[0-9]{1,4}$" test.txt
192.168.12.100
192.168.12.1009
关于匹配的实例
grep -c "1" test.txt 统计所有以“1” 字符开头的行有多少
grep -i "May" test.txt 不区分大小写查找 May所有的行

3、awk(匹配列)

截取第一列
awk '{print $1}' test.txt
#截取最后一列
awk '{print $NF}' test.txt
#截取倒数第一列
awk '{print $(NF-1)}' test.txt
打印第一列和最后一列的前5行
awk -F: '{print $1,$NF}' /etc/passwd |head -5
#打印第一列和最后一列的后5行
awk -F: '{print $1,$NF}' /etc/passwd |tail -5
在打印出来后的产物添加个冒号用“”
awk -F: '{print $1":"$NF}' /etc/passwd |tail -5
#":" 冒号表示添加  
获取ip地址
ifconfig |grep "netmask" |grep -v '17' |grep -v "127" |awk '{print $2}'
使用反引号使用变量
hostname `ifconfig |grep "netmask" |grep -v '17' |grep -v "127" |awk '{print $2}'`
#直接把主机名改为
root@k8s-master01 sijianke]# hostname
k8s-master01
[root@k8s-master01 sijianke]# hostname `ifconfig |grep "netmask" |grep -v '17' |grep -v "127" |awk '{print $2}'`
[root@k8s-master01 sijianke]# hostname
192.168.12.201

4、sed(更改)

替换第一行
[root@k8s-master01 sijianke]# sed -i 's/is/iis/1' test.txt 
Thiis is my first script!
#替换第二行
[root@k8s-master01 sijianke]# sed -i 's/is/iis/2' test.txt 
This iis my first script!
#全部替换
[root@k8s-master01 sijianke]# sed -i 's/is/iis/g' test.txt 
Thiis iis my first script!
删除
#删除空白行
 sed '/^$/d' file
#删除文件第二行
 sed '2d' file
#删除文件的第2行到末尾所有行:
 sed '2,$d' file
#删除文件最后一行
 sed '$d' file
#删除文件中所有开头是test的行
 sed '/^test/'d file
posted @ 2022-07-07 14:07  devops运维-小灰灰  阅读(77)  评论(0编辑  收藏  举报