Linux三剑客
一 sed
什么是sed?
sed->流式编辑器
为何用sed?
sed 对比 vim
1、sed可以把处理文件的规则事先写好,然后用同一套规则编辑多个文件
而vim只能一个个编辑===》用于用一套规则处理多个文件
2、sed处理文件,一次只处理一行,即同一时间内存中只有文件的一行内容
无论文件多大,都不会对内存造成过大的压力====》用于处理大文件
如何用sed
sed 选项 '规则' 文件 (规则可以是'定位+命令')
举例:sed 'p' a.txt,会输出
111
111
222
222
333
333
也就是p先打印一遍,之后sed会把原文默认输出一遍
选项:
-n 取消默认输出
-i 把输出到屏幕中的内容(规则处理的结果+默认输出的结果)
举例:sed -n 'p' a.txt,会输出
111
222
333
-n取消了默认输出,所以只有一遍
举例:sed -i 'p' a.txt,这个不会有输出结果,直接保存
规则:定位+命令
定位方式:
行号定位:
sed '1p' a.txt 只会重复打印第一行,后面的内容不变,如果需要单独打印第一行,需要加-n
sed '1,3p' a.txt 打印1到3行,其他相同
sed '3p;5p' a.txt打印第3行,打印第5行,其他相同
sed '3i xxxx' a.txt 代表是在第三行前面插入xxxx,让其变成第三行
sed '3a xxxx' a.txt 代表的是在第三行后面插入xxxx,这个会变为第四行
sed '/^$/d' a.txt (去掉空行)
正则定位
sed '/^egon$/p' a.txt
^代表egon在开头,$代表egon在尾部
没有定位代表定位所有行
命令:
d(删除)
p(打印)
s///gi(g是搜索全行,i是不区分大小写)
sed '1,3s/egon/EGON/' 文件 意思为寻找第一行到第三行,将egon替换为EGON,s是替换意思
sed '/^egon/s/egon/EGON/' 文件 意思为寻找所有开头为egon的,将egon改为EGON
ps:替换的时候我们有时候要在最后的/后面加上g避免只替换一个,还有i,这样就能不区分大小写替换
可以使用管道
二 awk
主要擅长处理有规律的文本,主要用于做一些格式化处理
awk 选项 '规则' 文件路径
选项:
-F: 指定分隔符
规则:定位+命令
定位:
行号定位:
awk -F: 'NR == 3{print $1,$3}' /etc/passwd 输出第三行的第一段和第三段(以':'为分割)
awk -F: 'NR >= 3 && NR <=5{print $1,$3}' /etc/passwd 输出第三行到第五行的第一段和第三段
awk -F: 'NR <= 3 || NR >=8{print $1,$3}' test.txt 输出前三行和八行后(包括八行)的第一段和第三段内容
awk -F: 'NR == 3 || NR ==5 || NR==7{print $1,$3}' test.txt 输出第三行、第五行和第七行的第一段和第三段内容
awk -F: 'NR>=3 && NR<=5{print $0}'test.txt 输出的是第三行到第五行所有段落内容($0是输出整行)
awk -F: '/nologin$/{print $1}' text.txt 找到结尾是nologin的行输出第一段内容
awk -F: '$1 == "root"{print $0}' test.txt 寻找开头是root的行,并输出整行($1代表的是开头第一段)
awk -F: 'NR>=1 && NR<=3 && $1 == "root"{print $0}' test.txt 前三行里开头为root的输出整行
当分隔的符号为空格时,代码应该为
awk -F" " '{print $1}' b.txt 输出每行的第一段(双引号中间为空格,不用双引号标起来,会无法识别)
awk -F: '{print NF}' test.txt 输出所有的段落个数(NF表示段落个数)
awk -F: '{print $NF}' test.txt 输出每行的最后一段(因为每行的段落个数可能不一样,所以需要NF来获取)
awk -F:'{print $(NF-1)}' test.txt 输出每行的倒数第二段
awk -F:'{print NR,$(NF-1)}' text.txt 输出每行的倒数第二段并标注是第几行
正则定位
awk -F: '//{print $1,$2}' 文件路径
awk '$2 !~ 127{print $2}' 取第二段里不带有127的(~代表正则模式开始,加了!表示取反)
没有定位代表定位所有行
命令:
{print $n}
sed 选项 '定位+命令' 文件路径
awk -F: '定位+命令' 文件路径
sed 选项 '3,5p' 文件路径
awk -F: 'NR>=3 && NR<=5{print $0}' 文件路径
三 grep
擅长过滤
grep 选项 "过滤规则" 文件
grep 'root' /etc/passwd 筛选出所有行里带有root的行,并用颜色标注root
grep -n "root" /etc/passwd # 显示行号
grep -i "" /etc/passwd # 忽略大小写
grep -l 'egon' a.txt # 如果文件中但凡是存在包含egon的行就算过滤成功,会返回文件名
grep -rl 'egon' /root/ 搜索文件夹里含有egon的(r表示递归,rl这样就会搜索文件夹里所有的文件)
ps aux(显示其他用户启动进程)
[root@web01 ~]# ps aux | grep 'vim'(显示vim的进程,最后一行由于命令的问题,实际上是不属于vim的)
root 9825 0.0 0.5 151692 5212 pts/1 S+ 12:05 0:00 vim a.txt
root 10190 0.0 0.0 112724 988 pts/0 R+ 12:30 0:00 grep --color=auto vim
ps aue | grep'vim' | grep -v "grep"(先找到所有含有vim的行,再去掉所有包含grep的行,这样剩下来的就是我们想要的 ps:-v作用是显示不包含匹配文本的所有行)
[root@web01 ~]# ps aux |grep '[v]im'(可以筛选出我们想要的,不会出现特殊的)
root 9825 0.0 0.5 151692 5212 pts/1 S+ 12:05 0:00 vim a.txt
[root@web01 ~]#
[root@web01 ~]# kill -9 9825(强迫进程终止)
windows
ctrl+alt+delete
C:\Users\oldboy>taskkill /F /PID 12080
成功: 已终止 PID 为 12080 的进程。
C:\Users\oldboy>tasklist | findstr "WeChat.exe"
WeChat.exe 11412 Console 1 127,836 K
C:\Users\oldboy>taskkill /F /PID 11412
成功: 已终止 PID 为 11412 的进程。
浙公网安备 33010602011771号