Shell 管道指令pipe
管道命令pipe
1.管道命令仅处理标准输出,对于标准错误输出会省略。
2.管道命令必须能够接受来自前一个命令的数据作为标准输入继续处理才行
选取命令 cut、grep
一段数据经过分析后,取出我们要的。或是经由分析关键词,取出我们想要的
选取信息通常是针对一行一行来分析的
cut 取出需要的信息
将一行信息当中,取出我们想要的信息,处理信息以行为单位
语法
用于有特定分割字符
cut -d ‘分割字符’ -f 第几个字段(从1开始计数)
用于排列整齐的信息,以字符的单位取出固定字符区间
cut -c 字符区间
选项和参数
-d 后面接分隔字符,与-f一起使用
-f fields 根据-d划分的段数,取出第几段
-c 以字符的单位取出固定字符区间
案例
取出PATH的第三个字段
[ranan@c105 ~]$ echo $PATH
/home/mpi/bin:/home/ranan/.local/bin:/home/ranan/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
[ranan@c105 ~]$ echo $PATH | cut -d ':' -f 3,4
/home/ranan/bin
[ranan@c105 ~]$ echo $PATH | cut -d ':' -f 3-5
/home/ranan/bin:/usr/local/bin:/usr/bin
取出每行的前5个字符
[ranan@c105 ~]$ echo $PATH | cut -c 1-5
/home
grep 取出需要行、过滤不需要的行
分析一行信息,若当中有我们需要的信息,就把一行拿出来。
可以先grep取出一行再利用cut取出需要的信息。
语法
grep [-A] [-B] [-acinv] [--color=auto] ‘查找字符’ filename
选项与参数
-a 将二进制文本以文本文件的方式查找数据
-c count计算找到'查找字符'的此时
-i ignore忽略大小写
-n 输出行号
-v 反向输出没有字符的那些行
--color=auto 可以将找到的部分加上颜色显示,centOS7之后,默认
-A 后面可以添加数字,after 除了输出该行外,后面的n行也输出
-B 后面可以添加数字,before 除了输出该行外,前面的n行也输出
[ranan@c105 ~]$ last -n 5
ranan pts/1 192.168.10.1 Fri Dec 3 15:53 still logged in
ranan pts/0 192.168.10.1 Fri Dec 3 10:11 gone - no logout
reboot system boot 4.18.0-240.22.1. Fri Dec 3 10:11 still running
ranan pts/0 192.168.10.1 Thu Dec 2 20:49 - 09:52 (13:03)
reboot system boot 4.18.0-240.22.1. Thu Dec 2 20:49 - 09:52 (13:03)
wtmp begins Sun May 23 20:25:21 2021
[ranan@c105 ~]$ last -n 5 | grep -n -A1 '192'
1:ranan pts/1 192.168.10.1 Fri Dec 3 15:53 still logged in
2:ranan pts/0 192.168.10.1 Fri Dec 3 10:11 gone - no logout
3-reboot system boot 4.18.0-240.22.1. Fri Dec 3 10:11 still running
4:ranan pts/0 192.168.10.1 Thu Dec 2 20:49 - 09:52 (13:03)
5-reboot system boot 4.18.0-240.22.1. Thu Dec 2 20:49 - 09:52 (13:03)
排序命令 sort、wc、uniq
使用场景: 计算一次数据里面的相同形式的数据总数
sort 排序
sort可以根据不同的数据形式来排序,sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
语法
sort [-fbMnrtuk][-o<输出文件>][-t<分割字符>] [+<起始栏位>-<结束栏位>] [file or stdin]
常见参数
-f 忽略大小写
-b 忽略每行开始的空格字符
-M 以月份的名字来排序
-m 将几个排序好的文件进行整合
-n 使用数值的大小排序
-o<输出文件>将排序后的结果存入指定的文件
-r 降序,默认升序
-c 检查文件是否已经按照顺序排序
-u uniq,去重配合-c,严格校验,不配合-c,则只输出一次排序结果,一般用uniq代替。
-t<分隔字符> 指定排序时所用的栏位分隔字符,默认[Tab]来分隔
-k 选第几列或第几列的第几个字符排序
案例
个人账号都记录在/etc/passwd下,将账号进行排序
[ranan@c105 ~]$ cat /etc/passwd | sort

/etc/passwd内容以:分割,我们以第三栏
[ranan@c105 ~]$ cat /etc/passwd | sort -t ':' -k 3
# 按数字排列
[ranan@c105 ~]$ cat /etc/passwd | sort -t ':' -k 3 -n
默认是以ASCII排列

按数字排序

假设三位数,按十位数从小到大,个位数从大到小排序。
[ranan@c105 ~]$ cat number.txt
991
454
522
258
322
[ranan@c105 ~]$ sort -n -k 1.2 -k 1.3nr number.txt # 为什么不行!错误写法
322
522
454
258
991
[ranan@c105 ~]$ sort -n -k 1.2,1.2 -k 1.3nr number.txt #第一列的第2个字符,从小到大,第一列的第三个字符,从大到小 这里r也就是-r
322
522
258
454
991
注意这里排序的第一种写法是错误的,省略了End部分,这就意味着你将对从第二个字母起到本域最后一个字符为止的字符串进行排序。如果不设定End部分,那么就认为End被设定为行尾,但是从小到大是只需要十位,不需要个位,所以需要限定。
把排序的结果输出到源文件
输出到其他文件可以使用 >
输出到同名文件使用 -o 文件名
[ranan@c105 ~]$ cat number.txt | sort -k 1.2 > number.txt
[ranan@c107 ~]$ sort -k 1.2 number.txt > newnumber.txt #不同名的可以
[ranan@c107 ~]$ cat newnumber.txt
91
52
34
45
29
[ranan@c105 ~]$ cat number.txt #number.txt为空了说明同名的是不可以的
# 使用-o
[ranan@c105 ~]$ cat number.txt
34
45
52
29
91
[ranan@c105 ~]$ cat number.txt | sort -k 1.2 -o number.txt
[ranan@c105 ~]$ cat number.txt
91
52
34
45
29
-u与-k的结合
-u只识别用-k设定的域,发现相同,就将后续相同的行都删除。
如果有两层排序,-u是会权衡所有-k选项,将都相同的才会删除,只要其中有一级不同都不会轻易删除的。
注意:如果遇见跨域,跨域的设定是个假象,不会跨域比较
[ranan@c105 ~]$ cat facebook.txt
google 110 5000
baidu 100 5000
guge 50 3000
sohu 100 4500
[ranan@c105 ~]$ sort -n -k 2 facebook.txt
guge 50 3000
baidu 100 5000
sohu 100 4500
google 110 5000
[ranan@c105 ~]$ sort -n -k 2 -u facebook.txt
guge 50 3000
baidu 100 5000
google 110 5000
uniq 去重
如果排序完成了,将重复的数据仅列出一个显示可以使用uniq
语法
uniq [-ic]
-i 忽略大小写
-c 进行重复出现的计数
-u 只显示不重复的行
-d 只显示重复的行
uniq最好结合排序使用,因为unqi只会将挨着的重复行删除
[ranan@c105 ~]$ last | cut -d ' ' -f 1
ranan
reboot
ranan
ranan
[ranan@c105 ~]$ last | cut -d ' ' -f 1 | uniq
ranan
reboot
ranan
[ranan@c105 ~]$ last | cut -d ' ' -f 1 | sort |uniq
ranan
reboot
wc 统计
wc可以统计一个文件里面有多少字,多少行,多少字符,可以帮我们计算输出信息的整体数据
语法
wc [-lwm]
-l 列出行
-w 列出多少字(英文字母)
-m 多少字符
注意
如果只使用wc 默认是按lwm的顺序输出
后面不能直接接文件!,可以使用标准输入
wc -l < nowcoder.txt
Shell 管道指令pipe的更多相关文章
- linux shell 管道命令(pipe)使用及与shell重定向区别
管道命令操作符是:”|”,它仅能处理经由前面一个指令传出的正确输出信息,也就是 standard output 的信息,对于 stdandarderror 信息没有直接处理能力.然后,传递给下一个命令 ...
- shell管道和重定向
看了前面一节:linux shell数据重定向(输入重定向与输出重定向)详细分析 估计还有一些朋友是头晕晕的,好复杂的重定向了.这次我们看下管道命令了.shell管道,可以说用法就简单多了. 管道命令 ...
- 进程间通信IPC之--无名管道(pipe)和有名管道(fifo)(转)
进程间通信IPC之--无名管道(pipe)和有名管道(fifo) 2012-01-17 22:41:20 分类: C/C++ 每个进程各自有不同的用户地址空间,任何一个进 程的全局变量在另一个进程中 ...
- 24 shell 管道命令与过滤器
1.管道命令的用法 2.使用管道命令的好处: 3.重定向和管道的区别 4.Linux管道实例 5.管道与重定向 1)管道与输入重定向 2)管道与输出重定向 6.过滤器 7.过滤器举栗 1.管道命令的用 ...
- HBase shell 常用指令
HBase shell 常用指令 连接HBase $ ./bin/hbase shell 打开帮助 hbase(main):001:0> help 创建表 hbase(main):003:0&g ...
- 进程间通信之管道(pipe、fifo)
我们先来说说进程间通信(IPC)的一般目的,大概有数据传输.共享数据.通知事件.资源共享和进程控制等.但是我们知道,对于每一个进程来说这个进程看到属于它的一块内存资源,这块资源是它所独占的,所以进程之 ...
- 体验usually.js的管道函数——pipe函数
体验usually.js的管道函数——pipe函数 usually.js 是一个面向现代 Web 开发的 JavaScript 函数库,基于 ES6 开发.最新版本2.4.1,最新版本usually. ...
- Linux系统编程——进程间通信:管道(pipe)
管道的概述 管道也叫无名管道,它是是 UNIX 系统 IPC(进程间通信) 的最古老形式,全部的 UNIX 系统都支持这样的通信机制. 无名管道有例如以下特点: 1.半双工,数据在同一时刻仅仅能在一个 ...
- Linux 进程间通信 无名管道(pipe)
无名管道: 1)只能用于具有亲缘关系的进程之间的通信(无名管道是某一个进程创建的,不像普通文件有路径,在文件系统中是不可见的,其他进程要想打开,只能通过继承的方式去打开) 2)半双工的通信模式,具有固 ...
随机推荐
- [CSP-S2021] 括号序列
链接: P7914 题意: 有一堆规则,然后判断给定字符串有多少种填法符合规则. 分析: 一眼区间dp,状态数 \(n^2\),我们来分析这些规则. 把这些规则分成三类,第一类可以预处理出区间是否能表 ...
- 精准测试系列分享之一:JaCoCo 企业级应用的优缺点分析
一.JaCoCo简介 JaCoCo是Eclipse平台下的开源产品,以小型,轻量化著称,常见集成在Eclipse Workbench中,除此之外的启动方式包括对接Ant和Maven,或是命令行的方式进 ...
- Zabbix5.0实现监控系统登陆失败告警
环境zabbix5.0,配置思路,通过添加监控项和触发器实现,监控项监控对应的日志文件,触发器过滤日志文件中的关键字,当出现failed时就发出告警. 监控项配置 类型选择zabbix客户端主动式,键 ...
- 微服务之十四如何在 Ocelot 网关中配置多实例 Swagger 访问
一.介绍 当我们开发基于微服务的应用程序的时候,有一个环节总是跳不过去的,那就是要创建 WebApi,然后,我们的应用程序基于 WebApi 接口去访问.在没有 Swagger 以前,我们开发好了 W ...
- TCP/IP概述(网络互联与TCP/IP)
TCP/IP概述(网络互联与TCP/IP) 用IP实现异构网络互联 从用户角度如何实现异构网络互联: 从用户角度看,实现异构网络互联的关键点就是使各种网络类型之间的差异对自己透明.在TCP/IP协议中 ...
- ELK集群之kibana(4)
kibane安装及基础使用 Kibana的安装 Kibana包含前端展示.es操作简化 yum localinstall kibana-7.6.2-x86_64.rpm -y Kibana配置修改ki ...
- etcd安装常用操作
etcd安装 etcd 是基于 Raft 的分布式 key-value 存储系统,由 CoreOS 开发,常用于服务发现.共享配置以及并发控制(如 leader 选举.分布式锁等).kubernete ...
- SSH服务器拒绝了密码。请再试一次。怎么改都不行
使用Xshell连接服务器,之前还好好的,突然之间就报"SSH服务器拒绝了密码.请再试一次"的错误. 1.检查 检查了IP.连接端口.用户.密码.网络是否正确? 本机情况:能够pi ...
- 逐浪CMS+百度小程序开源包发布-对接海量资源助力推广
接入百度小程序海量流量就在使用Zoomla!逐浪CMS开发栈 这里有最强的CMS内核依托于国家高新企业Zoomla!逐浪之上 这里有最海量的用户流量依托于百度小程序 这里有最开放的技术栈 这里有最卓越 ...
- 大白话讲解Mybatis的plugin(Interceptor)的使用
mybatis提供了一个入口,可以让你在语句执行过程中的某一点进行拦截调用.官方称之为插件plugin,但是在使用的时候需要实现Interceptor接口,默认情况下,MyBatis 允许使用插件来拦 ...