Linux管道命令——《鸟哥的Linux私房菜》笔记

拜拜、爱过 提交于 2019-12-04 20:43:02

Linux管道命令——《鸟哥的Linux私房菜》笔记


0 前言

看完书之后,总感觉不记录下来的话,很快就会忘了,然后又需要重新到处翻书找资料,所以还是把内容记录下来,方便以后复习。本文大部分是书中的内容,中间加入部分自己的理解以及尝试的例子。


1 简单使用

  • 管道命令使用“|”这个界定符号,用于两个命令中间,作用是把左边命令的标准输出作为右边命令的标准输入。

  • 例如要查询/etc目录下的文件详情,但是内容太多会刷满屏幕,查看起来不方便,就可以利用管道命令通过less命令来查看输出。

    ls -al /etc | less

  • 需要注意的点:

    • 管道命令仅能处理标准输出(standard output),会忽略出错时输出的信息(standard error output);
    • 管道命令命令必须要能够接受来自前一个命令的数据成为标准输出继续处理才行。

2 选取命令

2.1 cut

2.1.1 命令介绍


  • cut命令可以将一段信息的某一段“切”出来,处理的信息是以“”为单位。
  • 命令说明如下:

  • cut -d ‘分隔字符’ -f fields # 该命令将每行按“分隔字符”分割,然后选取fields参数的那几部分
  • cut -c 字符范围 # 该命令用于排列整齐的信息,可以取出每一行在选定字符范围内的串
  • 参数:
    -d : 后面接分隔字符,与-f一起使用;
    -f : 依据-d的 分隔字符,将一段信息切割成为数段,用-f取出第几段(可以取多段)
    -c : 以字符为单位取出固定字符区间的串

2.1.2 命令示例

1 获取PATH变量的第五个路径。
因为在Linux系统下,PATH变量的值是按‘:’分隔的,所以分隔字符是‘:’。

echo $PATH | cut -d ‘:’ -f 5

如果要获取第1和第3个路径,则:

echo $PATH | cut -d ‘:’ -f 1,3 # 经试验,命令中写1,3 与 3,1 的结果是一样的,都会先输出第一行

如果要获取连续的一段区间,如第3~6,则:

echo $PATH | cut -d ‘:’ -f 3-6 #这是一个闭区间

如果要获取从某一部分开始,一直到末尾,如从第二个路径开始,则:

echo $PATH | cut -d ‘:’ -f 2-

2 将export输出的信息取得第12个字符

export | cut -c 12

其他区间的选择方式与上面相同。
-c 参数主要用于排列整齐的信息

2.1.3 注意事项

cut命令处理多空格相连的数据比较难


2.2 grep

2.2.1 命令介绍

  • cut命令是在一行信息中取出某部分,而grep则是分析一行信息,若当中有我们需要的信息,就把该行拿出来。
  • 命令说明如下:
  • grep [-acinv] [–color=auto] ‘所要查找的字符串’ filename
  • 参数
    -a : 将binary文件以text文件的方式查找数据;
    -c : 计算找到‘所要查找的字符串’的次数;
    -i : 查找时忽略大小写;
    -n : 输出行号;
    -v : 反向选择,即显示出没有‘所要查找的字符串’内容的那一行;
    –color=auto : 将找到的关键词部分加上颜色显示。

2.2.2 命令示例

1 将/etc/passwd文件当中有root出现的那一行提取出来

cat /etc/passwd | grep ‘root’

2 将/etc/passwd文件当中不含有root的那一行取出

cat /etc/passwd | grep -v ‘root’

3 将/etc/passwd文件当中有root出现的那一行提取出来,且仅取第三列

cat /etc/passwd | grep ‘root’ | cut -d ‘:’ -f 3


3 排序命令

3.1 sort

3.1.1 命令介绍

  • sort命令可以依据不同的数据类型来排序。
  • 命令说明如下:
  • sort [-fbMnrtuk] [file or stdin]
  • 参数
    -f : 忽略大小写的差异;
    -b : 忽略最前面的空格符部分;
    -M : 以月份的名字来排序,例如JAN,DEC等的排序方法;
    -n : 使用数字类型进行排序(默认是字符串类型);
    -r : 反向排序;
    -u : 相同的数据中,仅出现一行;
    -t : 设置分隔符,默认是用 [tab] 分隔;
    -k : 指定以哪个区间进行排序,默认是第一个区间。

3.1.2 命令示例

1 将/etc/passwd文件中的信息按账号进行排序

cat /etc/passwd | sort

2 /etc/passwd文件中的信息是按 : 来分隔的,以第三列进行排序

  • cat /etc/passwd | sort -t ‘:’ -k 3 # 这是把第三列按字符串类型进行排序
  • cat /etc/passwd | sort -t ‘:’ -k 3 -n # 这是把第三列按数字类型进行排序
  • cat /etc/passwd | sort -t ‘:’ -k 3 -n -r # 这是把第三列按数字类型逆序排序

3 仅把/etc/passwd文件中的账号取出,并按字典序逆序排序

  • cat /etc/passwd | cut -d ‘:’ -f 1 | sort -r
  • cut -d ‘:’ -f 1 /etc/passwd | sort -r

3.2 uniq

3.2.1 命令介绍

  • 把输入的重复数据仅显示一次
  • 命令说明如下:
  • uniq [-ic]
  • 参数
    -i : 忽略大小写字符的不同;
    -c : 计数,即显示每个数据出现的次数

3.2.2 命令示例

1 将/ect/passwd 文件中第四列的数据按数字类型正序排好后,重复的数据仅显示一次

  • cut -d ‘:’ -f 4 /etc/passwd | sort -n | uniq
  • cut -d ‘:’ -f 4 /etc/passwd | sort -nu

上面两种方式的效果是相同的,那么为什么还要有uniq呢?这是因为uniq能够显示数据重复的次数

2 在1的基础上,显示出数据重复的次数

  • cut -d ‘:’ -f 4 /etc/passwd | sort -n | uniq -c

此时,显示的数据最左边为重复次数,后接一个空格,随后是cut获取到的排好序的数据

3 在2的基础上,把显示的数据按重复次数逆序排好

  • cut -d ‘:’ -f 4 /etc/passwd | sort -n | uniq -c | sort -t ’ ’ -k 1 -n

因为uniq -c命令后,重复次数在第一列,且与数据以空格隔开,所以用sort命令按空格分隔,按第一列以数字类型排序


3.3 wc

3.3.1 命令介绍

  • wc命令可以列出数据总共有多少行,多少字(英文单字),多少字符
  • 命令说明如下:
  • wc [-lwm]
  • 参数
    -l : 仅列出行;
    -w : 仅列出多少字(英文单字);
    -m : 多少字符。
  • 如果不带参数的话,则列出行数、字数以及字符数

3.3.2 命令示例

统计/etc/passwd文件里面总的行数、字数和字符数

cat /etc/passwd | wc


4 未完待续


5 后记

上述命令的参数仅为《鸟哥的Linux私房菜》中列出来的常用的参数,实际上,上述命令并不止有那几个参数,具体的可以使用man指令查看。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!