管线命令接受|前面传来的stdout,管线示意图如下所示:
管线两个需要注意的地方:
1.管线仅会处理stdout,忽略对stderr的处理
2.管线必须接受前个指令的stdin才是
那么,如果我想接受stderr的数据该怎么处理呢:
可以用数据流的重新导向功能把stderr重新导向为stdout,用2>&1可以把stderr变成stdout导出
攫取命令cut,grep
cut
把一行中需要的信息取出来
cut -d'分隔字符' -f fields
cut -c 字符区间
-d 根据后面的分隔字符切分 fields,与-f一起用
-f 分隔符切分之后,分为几段,f代表取第几段的意思
-c 以字符为单位取出字符
例:可以取得分割后的字段
例:在整齐排泄的字符总,可以取得一个区间
查看登录的用户名
grep
如果行内含我们需要的信息,就把这行拿出来
grep -acinv --color=auto str filename -a 将binary文件以text文件查字符串 -c 计算找出的字符串的次数 -i 忽略大小写 -n 输出行号 -v 反向选择,选择没有str那一行 --color=auto 找出的关键字加颜色
例:查字符串行
反向选择
配合使用
高亮
grep进阶选项
grep -A -B --color=auto '要搜寻的字符串' filename
[shichaogeng@study ~]$ grep -n -A3 -B2 MANPATH /etc/man_db.conf
利用[]搜寻集合字符
搜寻test和taste两个单字,[]来匹配一个字符
查询带oo不带g字符
解释下第19行,因为oo前面可能是o,所以认定oo前面不带g
oo前面不带小写字母
也可以这么写
查询带数字的
也可以这么写
利用行首和行尾字符^$
^来代表以什么开头
也可以这么写
查找非英文开头的
由以上例子可知,^放在[]之内和之外是不同的,放在里面代表非,放在外面代表行首
查找结尾是.的行
分析
可知,^M$为windows换行符,$为linux换行符,这样就可以理解^$的意义了
怎么找出空白行呢。。。机智的我看了答案就知道了,查以$为开头的当然就是空白行了
查询并打印出文件中非#的批注和空白行的内容
任意一个字符.与重复字符*
小数点. 代表一定有一个任意字符
* 代表重复前一个字符,0到无穷次
找出g??d字符的行
带0个或者多个o的字符
至少两个o以上字符串
开头结尾都是g,中间至少一个o
查询gg中间任意字符的字符串
任意数字字符串
限定连续字符范围
查找gg中间0-5个o的字符串
上条两个以上的oo呢
排序命令 sort wc uniq