Linux 管道命令

cut

在一行中取出部分数据,以行为单位

cut -d '分隔符 ' -f fields
$ pwd   /home/users/chenzhaoqun   
$ pwd |   cut -d '/' -f 1       
$ pwd |   cut -d '/' -f 2   
home   
$ pwd |   cut -d '/' -f 3    
users   
$ pwd |   cut -d '/' -f 4   
chenzhaoqun   
$ pwd |   cut -d '/' -f 3,4       
users/chenzhaoqun   

cut -c 字符范围

以字符为单位取出固定字符区间

$ export   
declare   -x ANT_HOME="/home/tools/tools/ant/apache-ant-1.6.5"   
declare   -x ANT_HOME_1_7="/home/tools/tools/ant/apache-ant-1.7.1"   declare   -x G_BROKEN_FILENAMES="1"       

$ export   | cut -c 12-   
ANT_HOME="/home/tools/tools/ant/apache-ant-1.6.5"   ANT_HOME_1_7="/home/tools/tools/ant/apache-ant-1.7.1"   G_BROKEN_FILENAMES="1"       

$ export   | cut -c 12-15   
ANT_   
ANT_   
G_BR   

grep

分析一行,有我们需要的信息就将该行拿出来

grep [-acinv] [--color=auto] '查询字符串' filename
-a将二进制文件以text方式查询
-c计算找到字符串的次数
-i忽略大小写
-n输出行号
-v反向选择,显示不包含‘查询字符串’的行

表2-1 grep使用的正则表达式元字符

元字符功能示例匹配对象
^行首定位符‘^love’匹配所有以love开头的行
$行尾定位符‘love$’匹配所有以love结尾的行
.匹配单个字符‘l..e’匹配包含一个l,后面跟两个字符,再跟一个e的行
*匹配0或者多个重复的位于*前的字符‘*love’匹配包含跟在0个或者多个字符后的love的行
[]匹配一组字符中的任意一个‘[Ll]ove’匹配Love或者love
[^]匹配不在指定组内的字符’[^A-Z]’匹配不在范围A至Z之间的任意一个字符
<词首定位符’<love’匹配包含以love开头的词的行
<词尾定位符‘love/>’匹配包含以love结尾的词的行
(..)标记匹配到的字符’(love)ing’模式love被保存在1号寄存器中,之后可用\1引用它
x{m}或x{m,}或x{m,n}字符x的重复次数:m次、至少m次、至少m次但不超过n次‘o{5}’,’o{5,}’ ,’o{5,10}’匹配连续出现5个o、至少5个o或者5~10个o的行

grep使用多个查询条件--或

其他方法:

1、使用多个 -e 参数

如:netstat -an | grep -E “ESTABLISHED|WAIT”

注意:netstat -an | grep -e EST -e WAIT 并列使用多个 -e参数可以实现或条件

2、使用扩展

如:netstat -an | grep -E “ESTABLISHED|WAIT”

注意:此处的 -E 是大写 ,匹配条件一定要加 引号

sort

sort [-fbMnrtuk] [file or stdin]
-f忽略大小写
-b忽略行前的空格
-M以月份的名字来排序,JAN > DEC
-n使用“纯数字”排序
-r反向排序
-uuniq
-t指定分隔符,默认是TAB
-k以分割之后的哪个field来排序

uniq

uniq [-ic]
-i忽略大小写
-c进行计数
$ last |   cut -d ' ' -f1 | sort | uniq -c | sort -r -n       
345 root       
171 duanzhib       
126 zouxidon        
68 zhouqian        
68 chenzhao        
37 wangjinl        
35 jiangwei   
  • last命令列出最近登录的用户列表
  • 第一列为用户名
  • 最后的结果是按登录次数逆序的排名

综合使用案例:

一个文件similog中有很多行:   
debug:[一汽%20夏利n5,一汽%20夏利n5][1,2] simi 100, interval 16       
想要把simi后面的分数取出来,并统计分布 

cat similog | cut -d ']' -f 3 | cut -d ' ' -f 3 | tr -d ',' | sort -n | uniq -c

cat similog  不解释
cut -d ']' -f 3 取出 simi 100, interval 16
cut -d ' ' -f 3 取出100,
tr -d ',' 删除,
sort -n 排序
uniq -c 统计出现的次数

tee

tee [-a] file
  • -a 对file进行续写,append文件模式

tee是将stdout转存一份到文件,又不影响stdout的输出,后面还可以被其他命令处理

字符转换命令 tr col join paste expand

tr [-ds] SET1 [SET2]

参数解释
-d删除str
-s替换掉重复的字符
-t将SET1按SET2的长度截断
tr ‘[a-z]’ ‘[A-Z]’upper case

col [-xb]

参数解释
-x将tab转成空格
-b将/,仅保留/最后接的字符

join [-ti12] file1 file2

将两个文件的按照第一列合并

参数解释
-t指定列分隔符,默认是空格
-i忽略大小写
-1 n对文件1按第n列比较
-2 n对文件2按第n列比较
join -1 3 file1 -2 4 file2

这是file1的第3列和file2的第4列,就会合并,然后放到第1列,后面接剩余的数据

注意:对比时两文件要sort

paste [-d] file1 file2

将两个文件的每行合并成一行,中间被分隔符分割

参数解释
-d指定分隔符

把file写成- 表示来自std input的意思

expand [-t] file

将tab转成空格,-t指定转成空格的个数

split

split [-bl] file PREFIX

将一个大文件切割成指定大小或指定行的小文件

参数解释
-b按大小分割,可加单位,b, k, m
-l按行数分割
PREFIX分割后文件名的前缀
-asuffix length,默认为2,且是aa,ab,ac…命名
-d以数字作为后缀

文件合并

使用重定向

如将file1,file2,file3合并成file

cat file1 file2 file3 >> file

cat file* >> file

xargs

xargs [-0epn] command

为command生成参数,并且执行command

因为有些command不支持直接使用管道,可以从stdin读入,使用空格分割,然后作为command的参数执行

参数解释
-0还原stdin中的特殊字符,如 ` \ 空格等,为一般字符
-e后面接一个字符串,xargs分析到该字符串时就停止,该字符串不会被使用
-p每次执行command,都询问
-ncommand使用n个参数,更多的都会忽略

– 减号

可以用-表示stdin或stdout,放在应该写file的地方

    原文作者:filterc
    原文地址: https://www.jianshu.com/p/b5588f7f2146
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞