1.sed
sed:stream editor :一次处理一行内容,处理时,把当前的行存储在临时缓冲区,处理完后,输送到屏幕
sed [参数] ‘命令’ file
参数 | 含义 |
---|---|
p | 显示 |
d | 删除 |
a | 添加 |
c | 替换 |
i | 插入 |
1)p
查看带:的行
查看带#的行
查看不带#的行
查看文件/etc/fstab的二到六行
2)d
删除文件/etc/fstab中带UU的行
删除文件/etc/fstab中带#的行
删除文件/etc/fstab中空行
删除文件/etc/fstab中带1到4的行
3)a
在westos文件中westos的后面添加hello
4)c
在westos文件中替换kikiki为hello world
在westos文件中全局替换kikiki为hello world
在westos文件中全局替换kikiki为hello换行 world
5)i插入
在westos文件中kikiki前插入word换行westos
注意:以上五种操作并不改变文件
6)-i:改变原文件内容
在westos文件中替换westos为redhat并改变文件。
在westos文件中全局替换k为redhat并改变文件。
练习:改变网络端口号
#!/bin/bash
sed -i "/^Listen /cListen $1" /etc/httpd/conf/httpd.conf
echo "Port has changed!"
echo -e "NOW,Port is $1!"
systemctl restart httpd
2.awk报告生成器
awk处理机制:根据模式一次从文件中抽取一行文本,对这行文本进行切片(默认使用空白字符作为分隔符)
[root@localhost ~]# awk '{print FILENAME,NR}' /etc/passwd
输出文件名,和当前操作的行号
/etc/passwd 1
/etc/passwd 2
[root@localhost ~]# awk -F: '{print NR,NF}' /etc/passwd
输出每次处理的行号,以及当前以":"为分隔符的字段个数
1 7 1代表第一行,共七列
2 7 2代表第二行,共七列
练习:找出UID小于2的用户
[root@localhost mnt]# awk -F: '$3<2 {print $1,$3}' /etc/passwd
以:分列(也可写为-F":",要求第三列小于2,并输出第一和第三列
root 0
bin 1
BEGIN{ }:读入第一行文本之前执行的语句,一般用来初始化操作
{ }:逐行处理
END{ }:处理完最后以行文本后执行,一般用来处理输出结果
练习:求出UID小于500的用户个数
[root@localhost mnt]# awk -F: 'BEGIN{i=0} {if($3<500) {i++}} END {print i}' /etc/passwd
31
求出UID小于500的用户个数和UID大于500的用户个数
输出以bash结尾的行
输出第三行
输出偶数行
输出奇数行
输出大于3小于5的行
统计文件总字段数
在输出的文件前加hahahah,统计行号,输出内容,结尾输出WESTOS。