grep sed awk
- grep:负责搜索
- sed:(编辑)处理行,是一种在线编辑器,一次处理一行内容,处理时,把当前处理的行存储在零时缓冲区中,然后用sed命令处理缓冲区中的内容,处理完毕后,把缓存区的内容送往屏幕,然后转而执行下一行,这样不断重复,直到文件末端,这里的文件的内容并没有改变。
可以用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等。
- awk:(内容分许并处理)处理列:倾向于将一行分成数个列来处理,其就是按逐行将文本读入,以空格为默认分割符将每行切片,切开的部分再进行各种分析处理。
#cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
sys:x:80:80:desktop:/var/lib/menu/kde:/sbin/nologin
只是显示/etc/passwd的账户
#cat /etc/passwd |awk -F ':' '{print $1}'
root
daemon
bin
sys
显示多行
#cat /etc/passwd |awk -F ':' '{print $1"\t"$7}'
root /bin/bash
daemon /bin/sh
bin /bin/sh
sys /bin/sh
使用BEGIN END模块
#cat /etc/passwd |awk -F ':' 'BEGIN {print "name,shell"} {print $1","$7} END {print "blue,/bin/nosh"}'
name,shell
root,/bin/bash
daemon,/bin/sh
bin,/bin/sh
sys,/bin/sh
blue,/bin/nosh
实战
1. sort -u和uniq (混合使用),最好先用sort把所有重复的排序到一起,然后再用uniq去重,防止多次去重
uniq所谓的重复是连续出现的相同记录
- -c:在每行开头显示重复行出现的次数;
- -d:仅显示重复的列;
- -f 栏位:忽略指定的栏;
- -s N:指定可以跳过前N个字符;
- -w 字符位数:指定用于比较的最大字符数;
- -u:仅显示出现一次的行列;
2. cut 截取
- N- 从第N个字符、字节、字段到结尾
- N-M 截取N-M
- -M 从第一个到M
- -b字节
- -c字符
- -d指定分割符
- -f,和-d配合使用,有了-d就必须有-f
3. wc 计算数字,可以帮助计算文件的字节数、字数或者是列数
- -c或–bytes或——chars 只显示bytes数
- -l或-lines:只显示列数
- -w或——words:只显示字数
4. tr 对标准输入的字符进行替换、压缩和删除
- -c或——complerment:取代所有不属于第一字符集的字符;
- -d或——delete:删除所有属于第一字符集的字符;
- -s或–squeeze-repeats:把连续重复的字符以单独一个字符表示;
- -t或–truncate-set1:先删除第一字符集较第二字符集多出的字符
5. diff a b 求a与b不相同的文件
6. 从多个文件中统计IP的个数
转自:https://blog.csdn.net/u012270113/article/details/38711611
若干个文件如hostsAA_平台.cfg 、 hostsBB_服务.cfg/hostsCC_平台.cfg 、 hostsDD_服务.cfg、 hostsXX_平台.cfg,每个文件定义了很多主机数,每个主机配置定义格式如下:
define host{
use linux-server
host_name AA-平台-济南
alias 16.198.64.4
}
ls host* | xargs cat | grep -E "[0-9] + .[0-9] +.[0-9] +.[0-9]+" | awk '{print $2}' | uniq | wc -l
1.xargs 命令适用于管道命令不能使用的情况,本例中xargs命令将前面的输出作为cat的命令行参数。
2.grep -E "[0-9] + .[0-9] +.[0-9] +.[0-9]+",查找含有ip格式的字符串
3.awk '{print $2}',只打印输出一行记录的第二个被分割的域。即 address 16.198.64.4 这行数据的 16.198.64.4