管道命令的使用

  bash命令执行的时候有输出数据,如果这群数据比寻经过几道手续之后才能得到我们所需要的格式,就涉及到管道命令(pipe),管道命令使用"|"这个界定符号,另外管道命令和连续执行命令是不一样的。

  管道命令"|"仅能够处理经由前面一个命令传来的正确信息,也就是standard output的信息,对于standard error并没有直接处理的能力。在每个管道后面接的第一个数据必定是命令,而且这个命令必须能够接收standard input的数据才行,这样的命令才可以是管道命令。至于ls , cp , mv 等就不是管道命令,因为ls , cp , mv 并不会接受来之stdin的数据。也就是说管道命令有两个特点:

(1)管道命令仅会处理standard output,对于standard error output会予以忽略

(2)管道命令必须要能够接收来自前一个命令的数据成为standard input继续处理才行。

一、选取命令cut、grep,针对"行"来分析。

cut:

-d     :     后面接分隔符,与-f一起使用。

-f     :     依据-d的分隔符将一段信息切割成为数段,用-f取出第几段的意思。

-c     :     以字符(characters)的单位取出固定字符区间

例子:

[email protected]:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
[email protected]:~$ echo $PATH | cut -d ‘:‘ -f 3-5
/usr/sbin:/usr/bin:/sbin

[email protected]:~$ echo $PATH | cut -d ‘:‘ -f 3,5
/usr/sbin:/sbin
[email protected]:~$ echo $PATH | cut -d ‘:‘ -f 2
/usr/local/bin

grep:

-i     :     忽略大小写

-v     :     反向选择,即显示没有"查找串内容"的一行

-n     :     显示输出行号

例子:

[email protected]:~$ last | grep -n ‘lq‘
1:lq       pts/2        115.156.187.51   Fri Jun 27 10:23   still logged in
9:lq       pts/7        115.156.187.51   Wed Jun 25 20:17 - 20:37  (00:20)
10:lq       pts/6        115.156.187.51   Wed Jun 25 19:59 - 21:31  (01:31)
11:lq       pts/4        115.156.187.51   Wed Jun 25 19:56 - 21:31  (01:35)
14:lq       pts/1        115.156.187.51   Wed Jun 25 19:35 - 21:31  (01:55)
18:lq       pts/3        115.156.187.51   Tue Jun 24 16:31 - 16:31  (00:00)
74:lq       pts/3        115.156.187.51   Sat Jun 14 15:42 - 15:52  (00:09)
388:lq       pts/0        115.156.187.51   Thu Apr 17 15:26 - 15:27  (00:00)
397:lq       pts/3        115.156.187.51   Wed Apr 16 15:33 - 18:59  (03:25)

二、排序命令sort、wc、uniq

sort:

-r     :     反向排序

-t     :     分隔符

-k     :     以那个区间来进行排序

例子:

[email protected]:~$ cat /etc/passwd | sort
backup:x:34:34:backup:/var/backups:/bin/sh
bind:x:107:113::/var/cache/bind:/bin/false
bin:x:2:2:bin:/bin:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh

[email protected]:~$ cat /etc/passwd |sort -t ‘:‘ -k 3
root:x:0:0:root:/root:/bin/bash
ubuntu:x:1000:1000:ubuntu,,,:/home/ubuntu:/bin/bash
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
lrx:x:1001:1001:,,,:/home/lrx:/bin/bash

[email protected]:~$ cat /etc/passwd | cut -d ‘:‘ -f 1 | sort
backup
bin
bind
daemon

uniq:

-i     :     忽略大小写

-c     :     计数

例子:

[email protected]:~$ last | cut -d ‘ ‘ -f 1 | sort | uniq -c
      1
      1 graduate
     13 jie
     11 lq
      4 lrx
    159 pc

wc:

-l     :     列出行数

-w     :     列出多少字(英文单字)

-m     :     多少字符

例子:

[email protected]:~$ cat /etc/issue | wc
      2       5      26

三列分别为行数、字数、字符数

三、双向重定向tee

tee:

-a     :     已累计的方式加入文件

例子:

[email protected]:~$ last | tee last.list | cut -d " " -f1

四、字符转换命令tr、col、join、paste、expand

tr:

-d     :     删除一段字符串

-s     :     替换掉重复的字符

例子:

替换掉小写字符,变成大写字符

[email protected]:~$ last | tr ‘[a-z]‘ ‘[A-Z]‘

删掉冒号

[email protected]:~$ last | tr -d ‘:‘

col:

-x     :     将tab键转换为对等的空格键

-b     :     在文字内有反斜杠(/)时,仅保留反斜杠最后接的字符

[email protected]:~$ man col | col -b > /root/col.man

col经常被利用于将man page转存为纯文本文件以方便查阅的功能。

五、切割命令split

split:

-b     :     后面接切割成的文件大小,可加单位如b,k,m等

-l     :     以行数进行切割

[email protected]:/mnt/fuse$ split -l 4 index.php index.php

[email protected]:/mnt/fuse$ ls -al

drwxrwxrwx  3 root   root     4096 Jul  1 16:21 .
drwxr-xr-x 10 root   root     4096 Jun 18 15:40 ..
-rwxr--r--  1 nobody nogroup  1295 Jun 18 20:22 index.php
-rw-rw-r--  1 lq     lq         98 Jul  1 16:21 index.phpaa
-rw-rw-r--  1 lq     lq        161 Jul  1 16:21 index.phpab
-rw-rw-r--  1 lq     lq        211 Jul  1 16:21 index.phpac
-rw-rw-r--  1 lq     lq        200 Jul  1 16:21 index.phpad
-rw-rw-r--  1 lq     lq        280 Jul  1 16:21 index.phpae
-rw-rw-r--  1 lq     lq        213 Jul  1 16:21 index.phpaf
-rw-rw-r--  1 lq     lq        132 Jul  1 16:21 index.phpag

将上面的文件合并可用:

[email protected]:/mnt/fuse$ cat index.phpa* >> index.php.backup

六、参数代换xargs

xargs:

例子:

将/etc/passwd内的第一行取出,仅取三列,使用finger显示账号内容

[email protected]:~$ cut -d ‘:‘ -f 1 /etc/passwd | head -n 3 | xargs finger
Login: root                             Name: root
Directory: /root                        Shell: /bin/bash
Last login Thu May 29 09:29 (CST) on pts/1 from ppt-20130509oii
No mail.
No Plan.

Login: daemon                           Name: daemon
Directory: /usr/sbin                    Shell: /bin/sh
Never logged in.
No mail.
No Plan.

Login: bin                              Name: bin
Directory: /bin                         Shell: /bin/sh
Never logged in.
No mail.
No Plan.

管道命令的使用

时间: 2024-08-19 03:06:51

管道命令的使用的相关文章

管道命令总结

管道命令 概念 管道命令只会处理stdout,忽略stderr 管道命令后面接的第一个数据必定是命令,这个命令必须能够接收stdin 选取命令 作用:取出我们想要的数据          cut 用途:将一行信息的某一段切出来 缺点:处理多空格相连的数据比较差                    cut -d '分隔字符' -f fields -d               后面接分割字符,与-f一起使用 -f                依据-d将一段信息切割成数段,用-f取出第几段 例

Linux基础篇四———管道命令

管道命令 如果我们的数据必须经过"几道手续"之后才能够得到我们想要的格式那么我们必须使用pipe命令来解决这个问题 **管道命令和连续执行命令是不一样的 我们来看一下管道命令的处理信息流程 管道命令的应用 1.cut **用于选取部分数据 -d:规定分隔符 -f:依据-d分隔之后所选取的数据段 -c:规定以字符为单位分割接数字来取到置顶位置数据. **cut的主要用途在于将同一行数据进行分解 2.grep **用于分析一行数据 -a: 将二进制文件以text文件的方式查找数据 -c:计

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

linux shell 管道命令(pipe)使用及与shell重定向区别 看了前面一节:linux shell数据重定向(输入重定向与输出重定向)详细分析 估计还有一些朋友是头晕晕的,好复杂的重定向了.这次我们看下管道命令了.shell管道,可以说用法就简单多了. 管道命令操作符是:"|",它仅能处理经由前面一个指令传出的正确输出信息,也就是 standard output 的信息,对于 stdandard error 信息没有直接处理能力.然后,传递给下一个命令,作为标准的输入 st

管道命令'|'

管道符号,是unix功能强大的一个地方,符号是一条竖线:"|", 用法: command 1 | command 2 他的功能是把第一个命令command 1执行的结果作为command 2的输入传给command 2, 例如: ls -l | more 该命令列出当前目录中的任何文档,并把输出送给more命令作为输入,more命令分页显示文件列表. 管道命令'|'

数据流重定向和管道命令(bash学习02)

标准输入输出和错误 标准输入(stdin) 是指令数据的输入,代码为0,使用<或者<<,默认是键盘 标准输出(stdout)是指令执行成功返回的结果,代码为1,使用>或者>>,默认由屏幕显示 标准错误输出(stderr)是指令执行失败返回的错误信息,代码为2,使用2>或者2>>,默认是屏幕 < 指定输入的数据媒介来源1> 将正确的内容 覆盖输出到指定的媒介1>> 将正确的内容 追加到指定的媒介2> 将错误信息覆盖输出到指定

谈谈Linux下的数据流重定向和管道命令

一.标准输入.标准输出.错误输出概述 1.标准输入(stdin)是指令数据的输入,代码为0,使用<或者<<,默认是键盘. 2.标准输出(stdout)是指令执行成功返回的结果,代码为1,使用>或者>>,默认在屏幕显示. 3.标准错误输出(stderr)是指令执行失败返回的错误信息,代码为2,使用2>或者2>>,默认是屏幕. 二.数据流重定向的使用      1."<":指定输入的数据媒介来源(tr 'a-z' 'A-Z' &l

Linux操作利器之管道命令

管道命令 管道命令:顾名思义,主要在管道二字上,意思就是把一些东西通过一个管道,变成你想要的样子,管道相当于一个过滤器,留下你想要看到的东西. Linux下面管道命令使用的是'|'界定符,其格式为'命令 | 命令',即把前一个命令的输出作为第二个命令的输入,第二个命令一般是一个文档选取命令. 选取命令cut,grep cut 按行处理文档 参数: * -d 后面接分隔符 * -f 后面接数字第几段 * -c 以字符为单位取出来第几段 例如: $:echo $PATH /home/work/.ju

Linux就该这么学--命令集合7(管道命令符)

1.管道命令符"|"的作用是将前一个命令的标准输出当作后一个命令的标准输入,格式为:"命令A|命令B". 找出被限制登录用户的命令是:grep "/sbin/nologin" /etc/passwd 统计文本行数的命令是:wc -l 将搜索命领的输出值传递给统计命令,其实只要把管道符建在中间就可以了: grep "/sbin/nologin" /etc/passwd|wc -l 附录: 管道符命令完全可以这样:命令A|命令B|

LinuxShell——管道命令

LinuxShell——管道命令 摘要:本文主要学习了Shell中的管道命令. grep命令 grep命令的作用是在文件中提取和匹配符合条件的字符串行,全称是Global Regular Expressions Print. 基本语法 1 [[email protected] ~]# grep [选项] 搜索内容 文件名 选项说明 1 -A n:n为数字,列出符合条件的行,并列出后续的n行. 2 -B n:n为数字,列出符合条件的行,并列出前面的n行. 3 -c:统计找到的符合条件的字符串的次数