十二、文本处理三剑客awk、sed、grep
今日内容:
1、文本处理三剑客命令:sed、awk、grep
2、文件查找命令:find
3、上传下载:wget、curl、rz、sz
4、去重与重定向 > >>
5、字符处理命令sort排序、uniq去重、cut处理有规律的文本、tr替换、wc统计
6、打包压缩tar
1、文本处理三剑客命令:sed、awk、grep(都支持管道)
1、sed流式编辑器
#sed 流式编辑器 处理完后默认将内容打印到屏幕 #选项: -n 取消默认输出(打印) -i 直接修改源文件内容(支持正则表达式) 例1:将1.txt里的egon替换为Egon: sed 's#egon#Egon#g' 1.txt #会先打印到屏幕,不修改内容 sed -i 's#egon#Egon#g' 1.txt #直接修改原文件内容 PS:建议先不加-i选项,确认修改后,再用-i执行; 例2:将1.txt里的第一行和第三行的egon替换为Egon: sed '3;5s#egon#Egon#g' 1.txt 规则:定位+命令 没有定位代表定位所有 行号定位 正则定位 #命令:
, 从第几到第几,只需一个p,如1,3p ; 第几和第几,分号左右需跟p,如1p;3p
I 忽略大小写,在p前面 s 替换内容,如s/// g 全局替换,如s///g d 删除delete p 打印print sed对比vim: 1>sed可把处理文件的规则先写好,之后再用同一套规则编辑多个文件,而vim只能一个个编辑,用于用一套规则处理多个文件; 2>sed处理文件,一次只处理一行,即同一时间内存中只有文件的一行,无论文件多大,都不会撑爆内存,可用于处理大文件;
#sed正则定位
sed '/^egon$/p' 1.txt #打印以egon开头并结尾的行
#PS:因有默认输出,会打印出不含2的行,含2的会打印两遍(因为有p,即print)
sed '/egon$/d' 1.txt #删除以egon结尾的行
sed 's/egon/EGON/gi' 1.txt #替换所有的egon为EGON
#PS:I忽略了大小写,主要针对类似EgOn的字符:
sed -n '/egon/Ip' 1.txt
2、awk
#概念:主要擅长处理有规律的文本,主要用于做一些格式化处理
#格式:选项 '规则' 文件路径
#选项:
-F 指定分隔符,如-F:即指定分隔符为冒号,分隔符引号可加可不加,空格要加
&& 和,两者都满足
|| 或,两者满足一个即可
#行定位
NR:取行,NR==3,则取第三行
NF:取段,NF==7:则判断段数为7
#若放在命令里:
#则配合$使用,如print $(NF-1),即打印倒数第二段,它是倒着数
#$NF:取最后一段
, 从第几到第几
; 第几和第几
举例:打印出第3行的第三段内容:
awk -F 'NR==3{print $3}' #打印第三行的第三段
awk -F 'NR==3,5{print $}' #打印第三行和第五行的最后一段
cat /etc/passwd|awk -F: 'NR >= 3 && NR <= 5{print $1}'
#以冒号为分隔,打印出>=3和<=5的第一段
cat -n /etc/passwd |awk -F: 'NR >= 3 && NR <=6'
#以冒号为分隔,打印出>=3和<=6的行
cat -n /etc/passwd |awk -F: 'NR >= 3 && NR <=6{print $3,$4}'
#以冒号为分隔,打印出>=3和<=6的第三段和第四段
#正则定位:
awk -F: '/egon$/ NR==3{print $1,$2}'
#以冒号为分隔,打印出第三行的第一和第二段
awk -F: 'NR>=1 && NR<=3 && $1=="root"' /etc/passwd
#以冒号为分隔,打印出>=1和<=3和第一段为root的行
awk -F" " {print $1,$2} 1.txt 等同于 awk -F {print $1,$2} 1.txt
#以空格为分隔,打印出第一段和第二段的所有行
#PS:空格分隔符可省略,默认即空格为分隔符
#特殊符号解释
$0 表示整个当前行
$1 每行第一个字段
NF 字段数量变量
NR 每行的记录号,多文件记录递增
FNR 与NR类似,不过多文件记录不递增,每个文件都从1开始
\t 制表符
\n 换行符
FS BEGIN时定义分隔符
RS 输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)
~ 匹配,与==相比不是精确比较
!~ 不匹配,不精确比较
== 等于,必须全部相等,精确比较
!= 不等于,精确比较
&& 逻辑与
|| 逻辑或
+ 匹配时表示1个或1个以上
3、grep过滤
#擅长过滤
#用法:grep 选项 '过滤内容'
#项:
-n 显示行号
-i 忽略大小写,默认情况下会区分大小写
-l 过滤出包含关键字的文件名,而不是文件内容
-r 递归过滤,等同于-R
-v 取反
#用法
ps -aux | grep 'ssh'等同于 ps -aux | grep '[s]sh'
grep -rl 'byebye'|xargs sed -i 's/byebye/egon/g' #配合xargs才可替换内容
#PS:xargs 给其他命令传递参数的过滤器,擅长将标准输入数据转为命令的参数
4、ps 查看系统内所有进程信息
ps #查看系统所有进程信息
ps -aux 等同于 ps aux #常用选项参数组合
5、kill 杀进程
1>Linux命令结束进程:
-9 结束进程,需配合进程号执行
[root@peng ~]# ps aux |grep find
root 1918 0.0 0.1 120920 1852 pts/0 T 16:09 0:00 find / -name redhat
root 6750 0.0 0.0 112808 968 pts/0 R+ 17:48 0:00 grep --color=auto find
[root@peng ~]# kill -9 1918
[root@peng ~]# ps aux |grep find
2>Windows命令结束进程:
tasklist #查看进程
tasklist | findstr "WeChat.exe" #过滤出微信
taskkill /F /PID 11445 #结束进程(PID号)