管道命令( pipe )

管道命令

  • bash 命令执行的时候,有输出的数据会出现,如果这些数据需要经过几道处理后才能得到我们所想要的格式,那么这个时候管道命令就很有用。
  • 管道命令仅能处理由前面一个命令传来的正确信息,也就是标准输出信息,对于标准错误输出没有直接处理能力。
  • 在每一个管道后边跟的必定是【命令】,且该命令必须要能够接受标准输入的命令才可以,这样的命令才是管道命令。

选取命令:cut、grep

  • 选取命令就是将一段数据经过分析后,取出我们所需要的。
cut:
  • 处理的信息以行为单位
  • 指令格式:【cut -d’分隔字符‘ -f fields】,【cut -c 字符区间】
参数说明
-d其后跟分隔符,与 -f 一起使用
-f根据 -d 分隔字符将一段信息划分为多段,用 -f 取出第几段
-c以字符为单位取出固定字符区间
grep:
  • 分析一行信息,若有我们所需要的信息,就将该行拿出来
  • 指令格式:grep [参数] [–color=auto] '查找字符’ filename
参数说明
-a将二进制文件以文本文件的方式查找数据
-c计算找到 ’ 查找字符‘ 的次数
-i忽略大小写
-n输出带行号
-v反向选择,即显示没有 ’ 查找字符‘ 那一项
–color=auto将找到的关键字部分加上颜色

排序命令:sort、wc、uniq

sort
  • 格式:sort [参数] [filr or stdin]
参数说明
-f忽略大小写
-b忽略最前面的空格部分
-M以月份名字来排序
-n使用纯数字进行排序(默认是以文字形式进行排序)
-r反向排序
-u即 uniq(唯一),相同数据仅出现一行代表
-t分隔字符(默认使用 [ tab ] 进行分隔
-k以哪个区间进行排序的意思

范例 1:/etc/passwd 内容是以 :来进行分隔的,想以冒号分隔的第三栏来进行排序,所使用命令为【 cat /etc/passwd | sort -t ':’ -k 3 】

uniq
  • 该命令将重复数据仅列出一行显示
  • 格式:uniq [ -ic ]
  • -i :忽略大小写
  • -c:进行计数
wc
  • 该命令可以计算输出信息的整体数据
  • 格式:wc [ -lwm ]
  • -l:仅列出行数
  • -w:仅列出字数(英文字母)
  • -m:列出字符数

双重定向:tee

  • tee 会同时将数据流分送到文件与屏幕
  • 格式:tee [ -a ] file
  • -a:以累加的方式,将数据加入 file 中
  • 注意:tee 后边跟的file(文件)若原本有内容,则会覆盖掉

范例 2:【 ls -l /home | tee ~/homefile | more 】,该命令是将 ls 的数据存一份到 ~/homefile,同时也在屏幕输出。

字符转换命令

tr:删除一段信息中的文字或是进行文字的替换
  • 格式:tr [-ds] SET1
  • -d:删除信息当中的 SET1 这个字符
  • -s:替换掉重复的字符
  • 例如:将 last 输出的信息中,所有的小写字符变为大写,所用命令为【last | tr ‘[a-z]’ ‘[A-Z]’】,此处不加单引号也可以执行。
col
  • 可以简单的将 [tab] 键替换为空格
  • 格式:col [-xb]
  • -x:将 tab 键换成对等的空格

范例 3:利用 cat -A 显示出所有的特殊按键,再用 col 将所有的 tab 转为空格。所用命令为【cat -A /etc/man_db.conf | col -x | col -A | more】

join:用于处理两个文件中有相同数据的一行,就将它们加在一起
  • join [参数] file1 file2
参数说明
-tjoin 默认以空格字符分隔数据,并且比对【第一个栏位】的数据。如果两个文件相同,则将两条数据连成一行,且将第一个栏位放在第一个
-i忽略大小写
-1数字 1,代表第一个文件要以第几个栏位来分析
-2数字 2,代表第二个文件要以第几个栏位来分析
  • 注意:在使用 join 之前,所要处理的文件应该先进行排序处理,否则有些对比的项目会被忽略。
paste:即粘贴,直接将两行贴在一起,中间以 [tab] 键分隔
  • 格式:paste [-d] file1 file2
  • -d:后边跟分隔符,默认是以 tab 分隔
  • -:如果 file 部分写成 - ,表示来自标准输入的数据的意思
expand:将 [tab] 转成空格
  • 格式:expand [-t] file
  • -t:后边跟数字,一般一个 tab 用 8 个空格替换,用该参数可以自行定义一个 tab 代表几个空格

划分命令:split

  • 将一个大文件,依据文件或行数来将其划分为几个小文件
  • 格式:split [-bl] file PREFIX
参数说明
-b其后跟欲划分成的文件大小,可跟单位如:b、k、m
-l以行数来进行划分
PREFIX代表前缀字符,可作为划分文件的前缀文字

范例 4:/etc/services 有六百多K,将其分成300K一个文件,所用命令为【cd /tmp; split -b 300k /etc/services sevices】,执行完毕后使用 ll 查看会发现有三个文件分别为:servicesaa、servicesab、servicesac。只要我们给定前缀文字,小文件就会以 xxxaa、xxxab、xxxac 等命名方式来建立小文件。

  • 使用数据流重定向即可将范例 4 中的三个小文件合并成一个大文件,所用命令为【cat services* >> servicesback】

参数代换:xargs

  • xargs 其实就是在产生某个命令的参数的意思,xargs 可以读入 stdin 的数据,并以空格符或换行符作为识别符,将 stdin 数据分隔成为参数。
  • 格式:xargs [参数] command
  • 当 xargs 后边没跟任何命令时,默认是以 echo 来输出。
  • 使用 xargs 时因为,很多命令其实并不支持管道命令,因此可以通过 xargs 来提供该命令使用标准输入。
参数说明
-0如果输入的 stdin 含有特殊字符,该参数可将特殊字符变为一般字符
-eend of file 的意思,后边可以跟一个字符,当分析到这个字符时,就会停止工作
-p执行每个命令都会询问使用者
-n其后跟次数,每次命令执行时,要使用几个参数的意思

范例 5:将 /etc/passwd 的第一栏取出,仅取三行,使用 id 这个命令将每个账号内容显示出来。所用命令为【cut -d ‘:’ -f 1 /etc/passwd | head -n 3 | xargs -n 1 id】,由于 id 命令一次只能接受一个参数,所以 xargs 利用 -n 1 每次只向 id 传递一个参数。

减号的用途

  • 在管道命令中,常常会使用到前一个命令的 stdout 作为这次的 stdin,某些命令(如 tar)需要用到文件名来处理时,该 stdin 与 stdout 可以利用 ‘ - ’ (减号)来替代。用以下范例 6 进行说明:

范例 6:【tar -cvf - /home | tar -xvf - -C /tmp/homeback】,这条命令是将 /home 里边的文件打包,但打包的数据不是记录到文件,而是传送到 stdout ,经过管道后,将【tar -cvf -/home】传送给后面的 【tar -xvf -】,后面这个 - 使用的是前一个命令的 stdout,因此不需要文件名。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值