管道命令pipe
1 选取命令
选取信息的分析 一般都是一行一行的来的:
1.1 cut
cut是切的意思,也就是把某一段的信息的某部分切出来,处理信息是以行为单位的。即把一行的想要的信息拿出来:
命令 | 作用 |
---|---|
cut -d ‘分隔符’ -f fields | 用于有特定分隔符字符 |
cut -c 字符区间 | 用于排列整齐的讯息 |
选项与参数:
- -d :后面接分隔字符。与 -f 一起使用;\
- -f :依据-d后面的分隔符将一段讯息分区成为数段,用-f提取出第几段;
- -c:以字符的单位取出固定字符区间;
将PATH变量取出 提取第n个路径
$ echo ${PATH} 输出PATH信息,信息以:分隔开来
$ echo ${PATH} | cut -d ':' -f 5 提取第五个信息
$ echo ${PATH} | cut -d ':' -f 3,5 提取第三个,第五个信息
$ echo ${PATH} | cut -d ':' -f 1-5 提取第一到五个信息
以:为分隔符 提取第5个信息以及第一个和第五个
获取export输出信息的第12个字符及以后内容
export输出的内容 ,前11个字符是一样的,那么获取后面不一样的字符可以使用cut -c
$ export |cut -c 12-
$ export | cut -c 1-11
只留下第12个字符及以后的内容:export |cut -c 12-
同样也可以把前11个字符截取出来: export | cut -c 1-11,注意 字符的位置是从1开始的
从last信息里面只取出用户名
$ last | cut -d ' ' -f 1 以空格为分隔符取出第一个信息 即用户名
1.2 grep
cut是取出一行里面想要的信息,而grep是 对每一行进行分析 假设这一行里面有我们想要的信息,那就把这一行取出来。
$ grep [-achinv] [--color=auto ] '搜索字符' filename
选项与参数:
- -a:将binary文件以text文件的方式进行搜索
- -c:计算找到‘搜索字符串’的次数
- -i:忽略大小写
- -n:输出行号
- -v:反向选择,显示没有‘搜索字符串’内容的行
- –color=auto:可以将找到的关键词部分加上颜色显示;
- -o:仅仅将搜索字符串显示出来
使用例子:
找出含有‘yinhui’的信息:
提取出含有‘yinhui’信息的第一个数据,有两种方法,可以用之前的cut,也可以用-o选项
将不含有‘yinhui’的信息取出来
统计出现‘yinhui’字符的行的数量
排序命令
sort
sort时进行排序的命令,可以依据不同的数据形态进行排序。
$ sort [-fbMnrtuk] [file or stdin]
选项与参数:
- -f:忽略大小写的差异
- -b:忽略最前面的空格符部分
- -M: 以月份的名字来排序例如JAN。DEC
- -n:使用纯数字来排序(默认是文字形态)
- -r:反向排序
- -u:就是unique,相同数据,仅出现一行为代表;
- -t:分隔符,预设是【tab】键
- -k:以那个区间(field)来排序
排序记录在/etc/paswd下的个人账户
$ cat /etc/passwd |sort
默认以第一个数据来排序,并且默认文字性 a-z
以第三栏排序 /etc/paswd 内容
/etc/paswd 内容是以:分隔开的
$ cat /etc/passwd | sort -t ':' -k 3
利用last 将输出的数据仅提取账号,并加以排序 并且一个账号只出现一次
uniq
如果排序完了,但是我只想每个相同的数据出现一次怎么办呢?答案就是unique命令
$ uniq [-ic]
- -c:计数
- -i :忽略大小写
使用last将账号列表列出,取出账号那一栏,进行排序只取一位:
$ last | cut -d ' ' -f 1| sort |uniq //只筛选一个
$ last | cut -d ' ' -f 1| sort -u //等同于上条命令
$ last | cut -d ' ' -f 1| sort |uniq -c // 每个用户登入的次数
wc命令
如果想知道一个文件里面有多少个字符、字节、多少行,可以使用wc这个命令
$ wc [-lwm]
选项与参数:
- -l:仅列出行
- -w:仅列出多少字(英文单字)
- -m:多少字符
统计一个文件有 多少行 多少字多少字符,
直接只使用wc默认全部统计 :按上面列出来的顺序
使用last 可以输出登入者的信息,但是last的最后两行并非账号内容,如何一一行指令取得登入系统的总人次?
$ last | grep [a-zA-Z] | grep -v 'wtmp' | grep -v 'reboot' | grep -v 'unknow' | wc -l
空白符 、wtmp、unknow、reboot、unknow等无关账号登入者的信息,利用grep取出非空字符,反向选择没有那几个关键字的那几行,在计算行数。