shell管道命令(pipe)

作者: Thinkando | 来源:发表于2017-12-03 16:16 被阅读45次
目录 命令
1. 管道命令 |
2. 选取命令 cut,grep
3. 排序命令 sort,wc,uniq
4. 双重数据流 tee
5. 字符转换命令 tr, expand, col, join, paste
6. 切割命令 split
7. 参数代换 xargs

1. 管道命令

image.png
  • command1正确输出,作为command2的输入 然后comand2的输出作为,comand3的输入 ,comand3输出就会直接显示在屏幕上面了。
    • 注意:
      • 1、管道命令只处理前一个命令正确输出,不处理错误输出
      • 2、管道命令右边命令,必须能够接收标准输入流命令才行。

2. 选取命令

2.1 cut

  • 从某一行将一段信息切出来
  cut -d '分隔符' -f fields
  cut -c 字符范围
-d 后接分隔字符,与-f一起使用
-f 根据-d将信息分解成数段,-f后接取第n段
-c 以字符为单位取出固定字符区间
# 用“:”分割,取第5段
echo $PATH | cut -d ':' -f 5
image.png
# 多行分割
last -5
# 用空格分割,取每行第一段
last -5|cut -d ' ' -f 1
image.png
# 范围分割
last -3
last -3|cut -c -6
last -3|cut -c 6-
image.png

2.2 grep

  • 分析一行信息,若当中存在我们需要的信息,则将该行输出,grep 后还可接正则表达式或通配符进行查询。
grep [-acinv] [-A] [-B] [--color=auto] ‘查找字符串’ filename
-a 将 binary 文件以 text 文件方式查找数据
-c 计算‘查找字符串’次数
-i 忽略大小写
-n 输出行号
-v 反向选择
-A 后面可跟数字,代表除了本行外,后续的 n 行也都列出来
-B 后面可跟数字,代表除了本行外,前面的 n 行也都列出来
--color=auto 关键字部分添加颜色
last -3
last -3|grep 'ttys001'
# 匹配不出现‘ttys001’,并显示行号
last -3|grep -vn 'ttys001'
# 显示匹配到的次数
last -3|grep -c 'chengkai'
# 通配符匹配
last -3|grep -n 'ttys00*'
image.png

3. 排序命令

3.1 sort

  • sort 可以按照不同的数据类型来排序
语法 sort [-fbMnrtuk]文件或输入流
-f 忽略大小写
-b 忽略最前面的空格
-M 以月份(英文)来排序
-r 反向排序
-t 分隔符与-k 连用
-u 就是 uniq
-k 以那个 field 的进行排序
last -3
# 用‘ ’分割第三段进行排序
last -3|sort -t ' ' -k 3
image.png

3.2 wc

  • wc 可以帮助我们统计文件字符信息
语法 wc [lwm]
-i 仅列出行
-w 仅列数字
-m 字符数
cat .bash_profile|wc
wc .bash_profile
image.png

3.3 uniq

  • 将重复的数据仅列出一列
语法 uniq [-ic]
-i 忽略大小写
-c 进行计数
# last|cut -d ' ' -f 1 |sort 截取登录名并排序
# uniq -c 删除重复列,并计数
# sort –n 按照计数排序
last|cut -d ' ' -f 1 |sort|uniq -c|sort -n
image.png

4. 双重数据流

4.1 tee

  • 如果你既想将输出数据流保存到文件也想同时控制台也会显示,那你就需要使用双重数据流了
语法 tee [-a] file
-a 以累加的方式进行添加
# 将最近登录的信息写入至last.list中,在屏幕上只显示登录名
last -3| tee last.list | cut -d ' ' -f1
# 将列表信息累加至homefile中,并在屏幕上显示
last -3| tee -a homefile
image.png

5. 字符转换命令

5.1 tr

  • 可以用来删除和替换一些文字信息
说明 tr 只是改变输出内容,并不会真正去修改文件的内容
语法 tr –d ‘字符’;tr –s ‘原字符’‘替换字符’
-d 删除
-s 替换
cat homefile
cat homefile |tr -s 't' 'T'
cat homefile |tr -d 't'
image.png

5.2 expand

  • 将[tab]按键转为空格键
语法 expand [–t] file
-t [tab] 按键替换多少个空格字符
cat test
# 把[tab] 键替换为1个空格字符
cat test|expand -1
image.png

5.3 col

  • 将一些特殊字符进行转换
语法 col [-xb]
-x 将 tab 键转成相应的空格
-b 在文字内有反斜杠,仅保留反斜杠后面接的那个字符
# 将man 命令的帮助文档保存为man_help,使用-b 参数过滤所有控制字符。在终端中使用如下命令:
man man | col -b > man_help

5.4 join

  • 主要是在处理“两个文件当中,有 "相同数据" 的那一行,才将他加在一起”的意思
语法 [-ti12] file1 file2
-t join 默认以空白字符分隔数据,并且比对“第一个字段”的数据,如果两个文件相同,则将两笔数据联成一行,且第一个字段放在第一个!
-i 忽略大小写的差异;
-1 这个是数字的 1 ,代表“第一个文件要用那个字段来分析”的意思;
-2 代表“第二个文件要用那个字段来分析”的意思。
head test test1
join test test1
image.png

5.5 paste

  • paste 就直接“将两行贴在一起,且中间以 [tab] 键隔开”而已
语法 [-d] file1 file2
-d 后面可以接分隔字符。默认是以 [tab] 来分隔的!
- 如果 file 部分写成 - ,表示来自 standard input 的数据的意思。
paste -d "\n" test test1
image.png

6.切割命令

6.1 split

  • 将大文件分割成多个小文件查看
语法 split [-bl] file PREFIX
-b 后面可接欲切割的文件大小
-1 以行数进行切割
PREFIX 切割后文件的前导符
# 把文件一行一行分开
split -1 test 
image.png

7. 参数代换

7.1 xargs

  • 参数代换的作用:
    • 作为某些指令的参数。比如 which, finger ,find ,whereis 等
    • 作为某些不支持管道命令的输入数据流
语法 xargs [-epn] command
-e 就是 EOF 的意思,后面可接一个字符串,当分析到这个字符串时,就会停止继续工作
-p 在执行每个参数时,都会询问用户
-n 后面接次数,执行 command 的次数
cat test 
cut -d ' ' -f 1 test|xargs whereis
image.png

参考文献

  1. https://wizardforcel.gitbooks.io/vbird-linux-basic-4e/content/92.html(鸟哥的linux 私房菜)

相关文章

  • 管道命令

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

  • shell管道命令(pipe)

    1. 管道命令 command1正确输出,作为command2的输入 然后comand2的输出作为,comand3...

  • Linux的管道命令

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

  • python pipe包管道包学习

    python Pipe包可以实现管道操作命令,实现高效的代码写作 构造你自己的pipe管道函数 参考github ...

  • Android系统之Binder通信机制

    前言 在Linunx进程中使用的通信方式有:socket(套接字通信),named(命令管道),pipe(管道),...

  • Linux管道命令(pipe)

    学习管道之前我们先了解一下linux的命令执行顺序 命令执行顺序控制 通常情况下,我们在终端只能执行一条命令,然后...

  • python 学习笔记(Queue & Pipe 进程间的通讯)

    Pipe multiprocessing.Pipe()即管道模式,调用Pipe()返回管道的两端的Connecti...

  • Android进程间通信机制-管道

    PIPE和FIFO的使用及原理 PIPE和FIFO都是指管道,只是PIPE独指匿名管道,FIFO独指有名管道,我们...

  • 进程间通信方式

    管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字...

  • 进程间通信的方式

    管道(pipe),流管道(s_pipe)和有名管道(FIFO) 信号(signal) 消息队列 共享内存 信号量 ...

网友评论

    本文标题:shell管道命令(pipe)

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