一:系统的三剑客命令:
1:grep 擅长对信息进行过滤
2:sed 修改替换文件内容,主要是对文件行内容进行操作
3:awk 擅长统计分析文件内容 主要对文件列内容进行操作
下列对三个命令进行分别介绍用法:
二:三剑客–老三:grep
grep主要擅长对信息进行过滤,这是grep主要的作用。
grep主要的参数:
-A:显示指定信息的后几行 after
-B:显示指定信息的前几行 befor
-C:显示指定信息的中间 centor
-v:对过滤的信息进行取反
-o:对过滤信息显示过滤的过程
-c:统计信息并显示出来 count
读者可以自己创建操作环境:
-B用法:
[root@oldboyedu ~ ]# grep -B 1 "old02" wei.txt
old01
old02
--
old01
old02
--
old01
old02
--
old01
old02
-A用法:
显示old02下一行信息: after 之后
[root@oldboyedu ~ ]# grep -A 1 "old02" wei.txt
old02
old03
--
old02
old03
--
old02
old03
--
old02
old03
-C用法:
既显示上一行 也显示下一行内容 center
[root@oldboyedu ~ ]# grep -C 1 "old02" wei.txt
old01
old02
old03
old01
old02
old03
old01
old02
old03
--
old01
old02
old03
-c用法:
统计old02 在文件中出现几次 count 计数
[root@oldboyedu ~ ]# grep -c "old02" wei.txt
4
-v用法:把开头有#的排除掉,只看没有#的行
grep -v "^#" /etc/selinux/config
注释:^这个符号是基础正则符号,表示以什么开头
三:三剑客–老二:sed
sed:字符流编辑工具(行编辑)--按照每行进行编辑
sed命令作用说明:
1):擅长对行进行操作
2):擅长将文件的内容进行修改调整/删除
具体功能作用:
1:增加
2:删除
3:修改
4:查找
sed命令的语法格式
sed 参数 条件-处理 要处理的文件信息
sed指令信息:****
a 增加 下面/下一行
c 替换 一整行
d 删除
i 插入 前面/上一行
p 输出
s 替换 可以直接进行替换工作
sed参数信息:
-n 取消默认输出
-r 识别扩展正则
-i 真是编辑文件(将内存信息覆盖到磁盘中)
-e 识别sed多个操作指令
读者可以自己创建测试环境:下面是我的测试环境:
[root@oldboyedu ~ ]# cat person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
测试如下:
根据行号
01:显示单行行号
[root@oldboyedu ~ ]# sed -n '3p' person.txt
103,Alex,COO
02:显示多行行号(连续的)
[root@oldboyedu ~ ]# sed -n '1,3p' person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
03:显示多行行号(不连续的)
[root@oldboyedu ~ ]# sed -n '1p;3p' person.txt
101,oldboy,CEO
103,Alex,COO
根据文件内容信息
01:输出单行信息
[root@oldboyedu ~ ]# sed -n '/oldboy/p' person.txt
101,oldboy,CEO
02:根据内容信息,输出多行内容(连续)
[root@oldboyedu ~ ]# sed -n '/oldboy/,/Alex/p' person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
03:根据内容信息,输出多行内容(不连续)
[root@oldboyedu ~ ]# sed -n '/oldboy/p;/Alex/p' person.txt
101,oldboy,CEO
103,Alex,COO
2)添加信息:
在文件第一行之前添加内容 i
[root@oldboyedu ~ ]# sed -i '1i100,oldgirl,UFO' person.txt 放到内存当中
100,oldgirl,UFO
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
在文件第二行之后添加内容 a
[root@oldboyedu ~ ]# sed -i '2a 106,oldbbb,ooo' person.txt
101,oldboy,CEO
102,zhaoyao,CTO
106,oldbbb,ooo
103,Alex,COO
104,yy,CFO
105,feixue,CIO
$ 在结尾添加内容
[root@oldboyedu ~ ]# sed '$a 106,oldbbb,ooo' person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
106,oldbbb,ooo
在oldboy前面添加oldgirl 后面添加olddgog
[root@oldboyedu ~ ]# sed -e '/oldboy/ioldgril' -e '/oldboy/aolddog' person.txt
oldgril
101,oldboy,CEO -e 扩展功能:可以干多件事情
olddog
102,zhaoyao,CTO
103,Alex,COO
104,yy,CFO
3)删除信息方法: d
01:删除单行;
[root@oldboyedu ~ ]# sed '4d' person.txt
101,oldboy,CEO
102,zhaoyao,CTO
103,Alex,COO
105,feixue,CIO
02:删除多行;连续的
[root@oldboyedu ~ ]# sed '1,3d' person.txt
104,yy,CFO
105,feixue,CIO
03:删除多行;不连续的
[root@oldboyedu ~ ]# sed '1d;3d' person.txt
注意:这样的删除只是删除缓存中的,实际上并没有删除
如果要真的删除的话,必须加上-i 这个参数
4)替换信息
语法格式:1:sed 's#原有内容#修改后的内容#g' 文件信息
2:sed 's#()#\n#g' 文件信息 后项引用前项进行替换
替换IP地址:
sed -i 's#200#41#g' /etc/sysconfig/network-scripts/ifcfg-eth0
补充:****
01:修改文件内容直接进行自动备份: 会在修改之前先备份,如何进行修改
[root@oldboyedu ~ ]# sed -i.bak '/^$/p' person.txt
[root@oldboyedu ~ ]#
[root@oldboyedu ~ ]# ll person.txt.bak
-rw-r--r-- 1 root root 65 4月 1 05:35 person.txt.bak
02:真实替换时:千万不要让n和i一起使用,使用的结果就是只会留下你修改的那行内容其他内容都会直接没有
另外:关于批量修改后缀名:
Centos7有专门的修改命令:rename:
语法格式:
rename .txt .jpg jin*.txt
要修改的后缀名 修改成什么后缀名 要修改的文件信息
测试结果:
[root@oldboyedu jin ]# rename .jpg .txt jin*.jpg
[root@oldboyedu jin ]# ll
总用量 8
-rw-r--r-- 1 root root 0 4月 1 06:29 jin01.txt
-rw-r--r-- 1 root root 0 4月 1 06:29 jin02.txt
-rw-r--r-- 1 root root 0 4月 1 06:29 jin03.txt
-rw-r--r-- 1 root root 0 4月 1 06:29 jin04.txt
-rw-r--r-- 1 root root 0 4月 1 06:29 jin05.txt
-rw-r--r-- 1 root root 0 4月 1 06:29 jin06.txt
-rw-r--r-- 1 root root 0 4月 1 06:29 jin07.txt
-rw-r--r-- 1 root root 0 4月 1 06:29 jin08.txt
-rw-r--r-- 1 root root 0 4月 1 06:29 jin09.txt
-rw-r--r-- 1 root root 0 4月 1 06:29 jin10.txt
-rw-r--r-- 1 root root 73 3月 31 10:20 jin1.txt
-rw-r--r-- 1 root root 55 3月 31 10:14 jin.txt
四:三剑客–老大:awk
1)awk 擅长对列进行操作/进行数据信息的统计
2)参数:
FS 设置输入列分隔符,等价于 -F选项。默认是空格
NF 列的字段总数,$NF指当前列最后一个的值
NR 已读的记录数(当前行数)
$0 指整条记录
$1, $2, … $n 分别是第1,2,...n列的字段值
3)作用:
处理信息:
01:文本文件
02:日志文件
03:配置文件
作用特点:
01:排除信息
02:查询信息
03:统计信息
04:替换信息
4)语法格式:
语法格式:
sed 【参数】 ‘条件-处理方式’ 文件
awk 【参数】 ‘模式-动作’ 文件
测试环境:读者也可以自己准备:
zhang Dandan 41117397 :250:100:175
zhang Xiaoyu 490230151 :152:90:201
Meng Feixue 234512341 :250:100:89
Wu Waiwai 4567909025 :250:100:43
Liu Bingbin 41745674 :250:100:16
Wang Xiaoai 2435245234 :250:100:15
Zi Gege 23452725 :250:100:17
Li Youjiu 41524523 :250:100:18
Lao Nanhai 435234523 :250:100:134
5)测试:
01:按照行号查询信息
#单行
[root@oldboyedu ~ ]# awk 'NR==2' awk.txt
zhang Xiaoyu 490230151 :152:90:201
#多行(不连续)
[root@oldboyedu ~ ]# awk 'NR==2;NR==3' awk.txt
zhang Xiaoyu 490230151 :152:90:201
Meng Feixue 234512341 :250:100:89
#多行(连续)
[root@oldboyedu ~ ]# awk 'NR==2,NR==4' awk.txt
zhang Xiaoyu 490230151 :152:90:201
Meng Feixue 234512341 :250:100:89
Wu Waiwai 4567909025 :250:100:43
补充:在Linux系统中:
=:表示赋值
==:表示等于的意思
02:按照字节查询信息
#多个字节(连续)
[root@oldboyedu ~ ]# awk '/Xiaoyu/,/Waiwai/' awk.txt
zhang Xiaoyu 490230151 :152:90:201
Meng Feixue 234512341 :250:100:89
Wu Waiwai 4567909025 :250:100:43
#多个字节(不连续)
[root@oldboyedu ~ ]# awk '/Xiaoyu/;/Waiwai/' awk.txt
zhang Xiaoyu 490230151 :152:90:201
Wu Waiwai 4567909025 :250:100:43
03:显示xiaoyu的姓氏和ID $1代表的是第一列
[root@oldboyedu ~ ]# awk '/Xiaoyu/{print $1,$3}' awk.txt
zhang 490230151
04:姓氏是zhang的人,显示他第二次捐款金额以及他的名字
[root@oldboyedu ~ ]# awk -F ":" '/zhang/{print $3}' awk.txt
100
90
04:显示所有以41开头的ID号码人的全名和ID号码
[root@oldboyedu ~ ]# awk '$3 ~/^41/{print $1,$2,$3}' awk.txt
zhang Dandan 41117397
Liu Bingbin 41745674
Li Youjiu 41524523
05:显示所有ID号码最后一位是1或者5的人的全名
[root@oldboyedu ~ ]# awk '$3 ~/[15]$/{print $1,$2}' awk.txt |column -t
zhang Xiaoyu
Meng Feixue
Wu Waiwai
Zi Gege
补充: column -t 是对齐的命令
~:按列进行匹配
06:显示Xiaoyu的捐款,每个都有以$开头
gsub(/要替换的信息/,“替换成什么信息”,在哪里进行替换)
[root@oldboyedu ~ ]# awk '$2~/Xiaoyu/{gsub(/:/,"$",$NF);print $NF}' awk.txt
$152$90$201
特殊的模式:
01:BEGIN {} 在awk执行命令前做什么事情:
[root@oldboyedu ~ ]# awk 'BEGIN{print "姓","名","ID","捐款记录"}{ print $0}' awk.txt | column -t
姓 名 ID 捐款记录
zhang Dandan 41117397 :250:100:175
02:END{} 在awk执行命令结束后做的操作
[root@oldboyedu ~ ]# awk 'BEGIN{print "姓","名","ID","捐款记录"}{ print $0}END{ print "操作结束"}' awk.txt | column -t
姓 名 ID 捐款记录
zhang Dandan 41117397 :250:100:175
操作结束
注意:
1:sed命令:i和n 不可一起使用,如果使用的话,就会使文件内容删除
以上就是三剑客命令的基础用法,请读者慢慢仔细阅读使用,更高级的用法,我会慢慢来学的。欢迎大佬来批评,指教,非常感谢!