Linux 管道命令

作者: filterc | 来源:发表于2019-04-07 13:59 被阅读7次

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 反向排序
-u uniq
-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 分割后文件名的前缀
-a suffix 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,都询问
-n command使用n个参数,更多的都会忽略

- 减号

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

相关文章

  • 管道命令

    参考linux shell 管道命令(pipe)使用及与shell重定向区别、管道命令 管道命令操作符是:”|”,...

  • Linux的管道命令

    Linux的管道命令 管道命令(Pipe) 双向重定向 字符转换命令:tr,col,join,paste,expand

  • linux三剑客与管道

    一:什么是管道? linux提供管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右面命令的输入 什么...

  • 16. Linux 管道符( ‘|’ )

    利用Linux所提供的管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入。连续使用管道意...

  • 2019-04-10tar压缩命令回顾、date修改时间命令、软

    压缩命令tar回顾 | 管道符号 把管道前面命令的结果 通过管道传递给后面的命令 Linux下面的对比工具(比较两...

  • Linux中的管道和echo命令

    在Linux中,管道是十分重要的概念,Linux允许将一个命令的输出(通过管道)作为另一个命令的输入。熟练使用管道...

  • Linux管道命令

    Linux系统中管道命令是linux系统的一个强大之处。 管道命令操作符是:”|”,它只能处理经由前面一个指令传出...

  • | 管道命令

    管道命令在Linux中十分有用,管道命令操作符是“|”,它能将经由前一个命令输出的标准输出,作为管道后一个命令的标...

  • Linux管道命令

    cut [-d]: 后接分隔字符,与-f一起使用 [-f]: 根据-d将信息分解成数段,-f后接取第n段 [-c]...

  • linux 管道命令

    linux 的管道命令 说实话 应该是linux最大的亮点,主要是是扩展性 真的很强大 ,任何一种语言 强大 之处...

网友评论

    本文标题:Linux 管道命令

    本文链接:https://www.haomeiwen.com/subject/cahsiqtx.html