一、sed
sed对比vim
1、sed可以把处理文件的规则事先写好,然后用同一套规则编辑多个文件
而vim只能一个个编辑
2、sed处理文件,一次只处理一行,即同一时间内存中只有文件的一行内容
无论文件多大,都不会对内存造成过大的压力===》用于处理大文件
如何用sed
什么是sed?
sed======》流式编辑器
命令格式:
sed 选项 ‘规则’ 文件路径
选项 : -i(改变流向输出,把输出到屏幕中的内容:规则处理的结果+默认输出的结果)
-n(取消默认输出)
命令:d (删除)
p (整行)
规则:定位+命令
定位方式:
行号定位
[root@@321 ~]# sed -n '1p' 2.txt (其中-n取消了默认输出,‘1p’为指定文件内第一行内容)
root:x:0:0:root:/root:/bin/bash
[root@@321 ~]# sed -n '1,3p' 2.txt (‘1,3p’为指定文件一到三行内容)
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@@321 ~]# sed -n '2p;5p' 2.txt(‘2p;5p’为指定行数为第二行和第五行)
bin:x:1:1:bin:/bin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
正则定位:
[root@@321 ~]# sed 's/^root/666/g' 2.txt(通过///定位到以root开头的行把root换成666)
666:x:0:0:root:/root:/bin/bash
如果没有定位代表定位所有行
二、awk
主要擅长处理有规律的文本,主要用于做一些格式化处理
规则:定位+命令
定位:
行号定位
NR==1 行号定位
[root@@321 ~]# sed -n '1p' 2.txt
root:x:0:0:root:/root:/bin/bash
[root@@321 ~]# awk -F: 'NR==1{print $7}' 2.txt (-F是指定分隔符为‘:’ print 打印,$7是指定的第七小 /bin/bash 段)
[root@@321 ~]# sed -n '1p;3p' 2.txt
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@@321 ~]# awk -F: 'NR==1 || NR==3{print $2,$7}' 2.txt (|| 是或者用来连接两个行号定位,分别取
x /bin/bash 第一行和第三行的第2和第7小段)
x /sbin/nologin
[root@@321 ~]# sed -n '3,5p' 2.txt
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@@321 ~]# awk -F: 'NR>=3 && NR<=5{print $3,$7}' 2.txt (&&表示并且,取行范围是三到
2 /sbin/nologin 五行并且取这三行内第三和第七小段
3 /sbin/nologin 的内容)
4 /sbin/nologin
[root@@321 ~]# awk -F"/" 'NR==5{print $(NF-1)}' 2.txt (NF是符号分割后行的长度)
sbin
正则定位
[root@@321 ~]# sed -n '1p' 2.txt
root:x:0:0:root:/root:/bin/bash
[root@@321 ~]# awk -F: '$1 ~ /root/{print $0}' 2.txt ($1在这个位置代表第一段有root就把整行打印下
root:x:0:0:root:/root:/bin/bash 来)
三、grep
擅长过滤
命令:
grep 选项 “过滤规则” 文件
[root@@321 A]# touch {1..8}.txt(创建了1-8这八个文件夹)
[root@@321 A]# ls
1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt
[root@@321 A]# vimdiff -O 1.txt 7.txt(-O左右分屏,在1.txt和7.txt两个文件里编辑了“root”并保存)
还有 2 个文件等待编辑
[root@@321 A]# grep -rn "root"(用grep过虑带有root的文件其中 -r 是递归着扫描当前文件夹及其下的所有子文
1.txt:1:root 文夹 -n 是显示行号)-r通常不会单独使用(-i 是忽略大小写 -l 如果文件中但凡
7.txt:1:root 是存在 "root" 行就算过滤成功,会返回文件名)
[root@@321 /]# ps aux (查看进程池)
[root@@321 /]# ps aux | grep "[s]sh"( | 管道符号,把前面的命令结果丢到管道内,后面的命令再从管道内取
root 6810 0.0 0.4 112756 4308 ? Ss 08:24 0:00 /usr/sbin/sshd -D 出然后执行。grep过滤出ssh
root 8117 0.0 0.6 161364 6068 ? Ss 13:19 0:01 sshd: root@pts/1 相关的进程)
root 8833 0.0 0.6 161364 6064 ? Ss 15:44 0:00 sshd: root@pts/0
[root@@321 /]# kill -9 8117 (直接杀掉当前号码的进程)