管道命令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的更多相关文章

  1. linux shell 管道命令(pipe)使用及与shell重定向区别

    管道命令操作符是:”|”,它仅能处理经由前面一个指令传出的正确输出信息,也就是 standard output 的信息,对于 stdandarderror 信息没有直接处理能力.然后,传递给下一个命令 ...

  2. shell管道和重定向

    看了前面一节:linux shell数据重定向(输入重定向与输出重定向)详细分析 估计还有一些朋友是头晕晕的,好复杂的重定向了.这次我们看下管道命令了.shell管道,可以说用法就简单多了. 管道命令 ...

  3. 进程间通信IPC之--无名管道(pipe)和有名管道(fifo)(转)

     进程间通信IPC之--无名管道(pipe)和有名管道(fifo) 2012-01-17 22:41:20 分类: C/C++ 每个进程各自有不同的用户地址空间,任何一个进 程的全局变量在另一个进程中 ...

  4. 24 shell 管道命令与过滤器

    1.管道命令的用法 2.使用管道命令的好处: 3.重定向和管道的区别 4.Linux管道实例 5.管道与重定向 1)管道与输入重定向 2)管道与输出重定向 6.过滤器 7.过滤器举栗 1.管道命令的用 ...

  5. HBase shell 常用指令

    HBase shell 常用指令 连接HBase $ ./bin/hbase shell 打开帮助 hbase(main):001:0> help 创建表 hbase(main):003:0&g ...

  6. 进程间通信之管道(pipe、fifo)

    我们先来说说进程间通信(IPC)的一般目的,大概有数据传输.共享数据.通知事件.资源共享和进程控制等.但是我们知道,对于每一个进程来说这个进程看到属于它的一块内存资源,这块资源是它所独占的,所以进程之 ...

  7. 体验usually.js的管道函数——pipe函数

    体验usually.js的管道函数——pipe函数 usually.js 是一个面向现代 Web 开发的 JavaScript 函数库,基于 ES6 开发.最新版本2.4.1,最新版本usually. ...

  8. Linux系统编程——进程间通信:管道(pipe)

    管道的概述 管道也叫无名管道,它是是 UNIX 系统 IPC(进程间通信) 的最古老形式,全部的 UNIX 系统都支持这样的通信机制. 无名管道有例如以下特点: 1.半双工,数据在同一时刻仅仅能在一个 ...

  9. Linux 进程间通信 无名管道(pipe)

    无名管道: 1)只能用于具有亲缘关系的进程之间的通信(无名管道是某一个进程创建的,不像普通文件有路径,在文件系统中是不可见的,其他进程要想打开,只能通过继承的方式去打开) 2)半双工的通信模式,具有固 ...

随机推荐

  1. 洛谷 P2120 [ZJOI2007] 仓库建设

    链接: P2120 题意: 有 \(n\) 个点依次编号为 \(1\sim n\).给出这 \(n\) 个点的信息,包括位置 \(x_i\),所拥有的的物品数量 \(p_i\),在此建设一个仓库的费用 ...

  2. Unity的Deferred Shading

    什么是Deferred Shading Unity自身除了支持前向渲染之外,还支持延迟渲染.Unity的rendering path可以通过Edit/Project Settings中的Graphic ...

  3. linux中解压.tgz, .tar.gz ,zip ,gz, .tar文件

    转载:https://blog.csdn.net/fu6543210/article/details/7984578 将.tgz文件解压在当前目录: tar zxvf MY_NAME.tgz 将.ta ...

  4. Centos7上安装docker (新手版本)

    1首先要有一个安装好的Centos7 2打开终端,输入一下命令(自动安装最新版本) curl -fsSL https://get.docker.com | bash -s docker --mirro ...

  5. upload-labs通关攻略(1-11关)

    upload-labs通关攻略 upload-labs是练习文件上传很好的一个靶场,建议把upload-labs关卡全部练习一遍 1.下载安装 下载地址 链接:https://pan.baidu.co ...

  6. kubernetes常见日志采集问题和解决方案分析

    传统日志与kubernetes日志对比 传统服务 目录固定 重启不会丢失 不用关注标准与错误日志输出 容器服务 节点不固定 重启服务会漂移 需要关注标准与错误日志输出 日志文件重启会丢失 日志目录不固 ...

  7. Oracle SQL注入 总结

    0x00 Oracle基础 Oracle 基本使用 什么是Oracle数据库? Oracle公司目前是世界上最大的软件提供商之一,与它并列的还有 Microsoft与 Adode.并且随着 Oracl ...

  8. vue禁用浏览器回退

    解决方案 mounted() { history.pushState(null, null, document.URL) window.addEventListener('popstate', () ...

  9. 1. 处理静态资源 2. controller如何接受请求得参数 3. 如何把controller得数据保存到view. 4. 在controller如何完成重定向到指定路径 5. controller返回json数据

    1. 1. 处理静态资源2. controller如何接受请求得参数3. 如何把controller得数据保存到view.4. 在controller如何完成重定向到指定路径5. controller ...

  10. 第二课 Dubbo设计的架构设计

    总体架构 Dubbo的总体架构,如图所示: Dubbo框架设计一共划分了10个层,而最上面的Service层是留给实际想要使用Dubbo开发分布式服务的开发者实现业务逻辑的接口层.图中左边淡蓝背景的为 ...