shell三剑客
1、cut 此命令不改变源文件内容,只是将需要的打印到控制台
在文件中负责剪切数据用。cut命令从文件的每一行剪切字节、字符和字段,并将这些字节、字符和字段输出
1)用法
cut 参数 filename 默认分隔符是制表符
cut -d 分隔符 -f 列数 file
2)参数
-f 列行提取第几列
-d 分隔符,按照指定分隔符分割列
###########示例
##空格为分隔符,切出2,3列
cut -d ’ ’ -f 2,3 cut.txt
##选取系统PATH变量值,从第二个冒号后所有的路径
[root@wanghaha shell_study]# echo $PATH|cut -d : -f 3- ## 3- 表示第3个之后所有的
/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
##切取IP
[root@wanghaha shell_study]# ifconfig ens33|grep 'inet ’ |cut -d ’ ’ -f 10
192.168.29.111
2、sed
sed是一个流编辑器,一次处理一行内容,处理时,把当前的行存储在临时缓冲区,称其为模式空间,
接着用sed命令处理缓冲区的内容,处理后缓冲区内容送往控制台,接着处理下一行。文件内容不改变,
除非使用重定向存储输出
1)用法
sed 参数 ‘command’ filename
2)参数
-e 直接在指令模式进行sed的动作编辑
-i 加这个参数,会改变源文件内容
3)命令功能
a 新增,a的后面可以接字符串,在下一行出现
d 删除
s 查找并替换
##示例—注意,此处4个例子都没有改变源文件
1>在文件cut.txt第2行下一行增加wanghaha
sed “2a wanghaha” cut.txt
2>删除cut.txt包含wanghaha的行
sed “/wanghaha/d” cut.txt
3>替换文件cut.txt中wanghaha为linshi
sed “s/wanghaha/linshi/g” cut.txt
4>删除文件的第2行,并且替换文件cut.txt中wanghaha为linshi
sed -e “2d” -e “s/wanghaha/linshi/g” cut.txt
3、awk
文件逐行读入,默认以空格为分隔符每行切片,切开的部分再做处理
1)参数
-F 指定分隔符
-v 赋值一个用户定义变量
示例
1>passwd中以root开头所有行,并输出第7列
awk -F: ‘/^root/{print $7}’ passwd
2>passwd中以root开头所有行,输出1和7列,逗号隔开
awk -F: ‘/^root/{print $1","$7}’ passwd
3>只显示passwd第1和7列,逗号隔开,且在所有行前加user,shell在最后行添加"wanghaha,ceshi"
awk -F: ‘BEGIN{print “user,shell”}{print $1","$7}END{print “wanghaha,ceshi”}’ passwd
4>将passwd文件中用户id增加数值1并输出
awk -F : -v i=1 ‘{print $3+i }’ passwd ##此处定义了i
5>计算文件第二列数值和
cat file |awk -F ’ ’ ‘{sum+=$2}END{print sum}’
2)awk内置变量
FILENAME 文件名
NR 已读记录数 行号
NF 浏览记录的域的个数(切割后,列的个数)
#示例
awk -F : ‘{print FILENAME “,” NR “,” NF }’ passwd
2>查询passwd文件中空行所在的行号
awk ‘/^$/{print NR}’ passwd
4、sort
将文件进行排序,并将结果标准输出
1)参数
-n 依照数值大小排序
-r 以相反顺序排序
-t 设置排序时所用分隔符号
-k 指定需要排序的列
-u 去重