1.grep
提取符合条件的行
常用用法:
- grep +字符内容 +文件名 :直接筛选文件中带有指定字符内容的行
- grep -v 字符内容 +文件名:-v取反 取文件中除了带有指定字符内容的行
2.cut
提取符合条件的列
常用参数:
- -f 列号:提取第几列
- -d 分隔符:按照指定分隔符分割列
示例1:
原文件:
使用cut -f 列数 文件名 提取指定列内容(注意:默认分隔符是tab键)
示例2:
原文件是/etc/passwd
使用cut -d 指定分隔符是“:”然后提取1,3列内容
示例3:
结合grep使用:
提取/bin/bash(可以登录)的用户:
注意:像以下情况,行之间不是连续相同的分隔符,使用cut就不合适了,就需要用到awk了
3.awk
在说awk之前,简单说一下printf的用法,因为在awk编程中,依赖printf输出结果。
基本用法:
printtf ‘输出类型输出格式’ 输出内容
(红线标注是常用的)
用法举例:
%s表示字符类型,这是三个一组,然后换行。
printf与print在awk中都支持,它们的区别就是print会在结尾自动加换行符,printf需要手动加\n。
注意:print与printf都是在awk程序之中使用的,Linux中默认是没有这两个命令的
接下来进入正题
awk命令
功能:截取符合条件的列
awk比cut复杂很多,功能也丰富很多
使用格式: (重点看下面的示例就明白了)
示例1:
说明:$0表示整行,$1表示第一列,$2表示第二列…
{}前面没有条件,所以是整个文本都执行{}里面的动作,即按照指定格式打印出了Name与Average的数据(文本是一行一行处理的)
示例2:
再来看一下上面cut没能完成的对df-h文件系统信息的提取
使用awk可以搞定。
再来看一个
结合了cut 显示了根分区内存使用量,可以应用于比如如果超过某个值,设置报警。
示例3:
加上BEGIN动作:
在程序执行的开始执行一次{}里的动作
下面这个例子,FS表示指定分隔符;如果不加BEGIN第一行root 0这行是不会做处理的,因为awk处理的时候会读入第一行数据,但这时FS=“:”设置分隔符的动作还没有执行
下图为不加BEGIN
示例4:
END:同BEGIN类似,在程序最后执行一次的动作
示例5:
支持关系运算
这里就是筛选出了平均成绩>87的同学
sed
sed是一个轻量级流编辑器。主要用来将数据进行选取,替换,删除,新增。
与Vi编辑器最大的区别是,sed可以与管道符结合使用,如图,后面会详细说;
并且,当我们在shell编程的时候,需要对一个文件内容进行更改,总不能用vim吧,所以shell编程中sed很常用。
示例1(使用-n输出):
-n只打印后面sed处理的行,2p是文件第2行,如图所见,-p一般都与-n一起使用
注意:sed中只要不加 -i 选项,操作都不会影响文件本身。
示例2:
动作的使用:
d删除,下图是删除2到3行;
a追加,在第二行之后追加了内容
i插入,在第2行之前插入内容
注意,这些操作都不影响文件内容本身
示例3:
-i选项,修改文件
下图中,把第4行99替换成了55