Linux_三剑客
内容
- grep
- awk
- sed
awk
是按{域 分隔符 域}
生成报表的工具。
经典应用有:把(文本)文件中浮点数的整数部分解析出来。
1 | # file.txt |
1 | awk -F. '{print $1}' file.txt |
重定向:
1 | awk -F. '{print $1}' file.txt > newfile |
小改动:把(文本)文件中浮点数的小数**部分解析出来。
1 | awk -F. '{print $2}' file.txt > newfile |
1 | cp /etc/passwd . |
场景–对命令执行输出的信息进行处理
编写脚本杀死全部当前正在睡眠的进程
1 | # some shells are sleeping... |
1 |
|
结合netstat -natp命令
获取端口、地址信息、状态信息去处理
结合free命令
sed
是对文件进行编辑的工具。在某行增删内容。
示例:对文件文本进行简单处理
1 | # file.txt |
1 | sed '2i\3.3' file.txt > newfile # 在第二行之前插入3.3,之后的行下移一行、 |
1 | sed '2a\3.3' file.txt > newfile # 在第二行下面附加3.3,之后的行下移一行 |
1 | sed '2,3d' file.txt > newfile # 删除第2、3行 |
1 | sed '1,2p' file.txt # 打印1~2行,但是默认会重复打印 |
三剑客结合
要灵活运用三剑客,应对两种结合方式:
- 结合,对文件操作
- 结合,对命令操作
1 | netstat -natp # 未过滤 |
未过滤的结果:
标准错误输出未重定向时:
|
管道默认只传输标准输出1的内容,因此grep只对标准输出1进行了过滤。第一行括号的提示内容是标准错误输出2的东西。
标准错误输出重定向后(过滤掉上面的提示信息):
netstat -natp 2>&1 | grep tcp
其中,2>&1
表示的是:标准输出2重定向到1,其中,>&
必须同时使用,表示:把2重定向到1并且一起传输给管道。
2>1
不能:创建名为 “1” 的文件并写入错误信息。
2&1
不能:误认为&
是后台执行命令
因此,我们想在命令行把程序执行后的输出结果输出到文件中时,可以这样:
./cmpxz DCE 20250709 >log.txt 2>&1
sed剔除前n行后(过滤掉上面的提示信息做法2):
1 | netstat -natp | sed -n '4,$p' # 输出4行及之后的全部行 |
结合awk提取第4列(Local Address):
1 | netstat -natp | sed -n '4,$p' | awk 'print $4' |
接上一步,提取地址信息中的端口号。
1 | netstat -natp | sed -n '4,$p' | awk 'print $4' | awk -F: '{print $2}' |
但是出现问题,最后的":::22"和"::1:631"被忽略了。需要另分一类特殊处理。
然后,我们用上面这个命令,可以做以下工作:查询某个端口是否被打开?
1 |
|
日积月累
awk从指定列打印到最后一列
https://stackoverflow.com/questions/1602035/how-to-print-third-column-to-last-column
其中,涉及了两个awk内置变量:NF和FS。