Linux学习[20]管线命令详解2---字符转换命令tr, col, join, paste, expand---分区命令split---参数代换xargs---减号 -

前言

接上一讲,这篇博客就如标题所见,对字符转换命令,分区命令以及参数代换进行阐述。这篇博客的东西说实话我平时用的不是很多,也是看书的时候才知道。既然看到了,那就顺便归纳记一下吧。


1. 字符转换命令

1.1 tr

tr指令用来删除一段信息当中的文字,或者是进行文字信息的替换。
一般用法:tr [-ds] SET1 ...
选项与参数:
-d :删除信息当中的 SET1 这个字串;
-s :取代掉重复的字符

纸上来得终觉浅,绝知此事要躬行。

例:使用cat /etc/passwd查看密码,对应输出的内容会有很多的:号,如果我想去除,就得用到tr。
即删除一段信息中的某个字段。

指令:cat /etc/passwd | tr -d ':'

这个指令就是凡是出现:这个字段,就删除。
所以有时候也挺绝对的,比如我某些字段要保留这个字符,tr就行不通了。
在这里插入图片描述

1.2 col

col一般就是用来处理tab键,将tab键取代成为空白键。
一般用法:col [-xb]
选项与参数:
-x :将 tab 键转换成对等的空白键

例:利用 cat -A 显示出所有特殊按键,最后以 col 将 [tab] 转成空白
用这个指令查看某个含有很多tab内容的文件,cat -A 文件路径,会有很多的^|符号,
使用cat 文件路径 | col -x | cat -A | more,之后我们会发现对应的^|就变成了空白。

1.3 join

join指令是用来处理两个文件之间的数据,要注意的是join主要是在处理“两个文件当中,有 “相同数据” 的那一行,才将他加在一起”的意思。

一般用法:join [-ti12] file1 file2

选项与参数:
-t :join 默认以空白字符分隔数据,并且比对“第一个字段”的数据,
如果两个文件相同,则将两笔数据联成一行,且第一个字段放在第一个!
-i :忽略大小写的差异;
-1 :这个是数字的 1 ,代表“第一个文件要用那个字段来分析”的意思;
-2 :代表“第二个文件要用那个字段来分析”的意思。

例如: /etc/passwd 第四个字段是 GID ,那个 GID 记录在 /etc/group 当中的第三个字段,请问如何将两个文件整合?
在这里插入图片描述
在这里插入图片描述
使用指令:join -t ':' -1 4 /etc/passwd -2 3 /etc/group | head -n 3
这里可以看到两个字段已经合并。
在这里插入图片描述

1.4 paste

这个 paste 就要比 join 简单多了,相对于 join 必须要比对两个文件的数据相关性, paste 就直接“将两行贴在一起,且中间以 [tab] 键隔开”而已!简单的使用方法:

一般用法:paste [-d] file1 file2
选项与参数:
-d :后面可以接分隔字符。默认是以 [tab] 来分隔的!
- :如果 file 部分写成 - ,表示来自 standard input 的数据的意思。

1.5 expand

expand就是在将 [tab] 按键转成空白键。
一般用法:expand [-t] file
选项与参数:
-t :后面可以接数字。一般来说,一个 tab 按键可以用 8 个空白键取代。
我们也可以自行定义一个 [tab] 按键代表多少个字符

2. 分区命令split

如果你有文件太大,导致一些携带式设备无法复制的问题,用split 。它可以帮你将一个大文件,依据文件大小或行数来分区,就可以将大文件分区成为小文件了

这个文件太大的问题,我之前在用U盘拷贝几个G的单个压缩包的时候发现无法拷贝,这个和U盘格式有关系,FAT最大支持也就4GB,得格式成NTFS才可以支持4GB以上。如果我不想格式化,那把一个文件分成几个小文件或许是一个好方法。

一般用法:split [-bl] file PREFIX
选项与参数:
-b :后面可接欲分区成的文件大小,可加单位,例如 b, k, m 等;
-l :以行数来进行分区。
PREFIX :代表前置字符的意思,可作为分区文件的前导文字。

下面的例子是书上的例子

例如:我的 /etc/services 有六百多K,若想要分成 300K 一个文件时
cd /tmp; split -b 300k /etc/services services
ll -k services*
-rw-rw-r–. 1 dmtsai dmtsai 307200 Jul 9 22:52 servicesaa
-rw-rw-r–. 1 dmtsai dmtsai 307200 Jul 9 22:52 servicesab
-rw-rw-r–. 1 dmtsai dmtsai 55893 Jul 9 22:52 servicesac
#那个文件名可以随意取的啦!我们只要写上前导文字,小文件就会以
#xxxaa, xxxab, xxxac 等方式来创建小文件

3. 参数代换xargs

一般用法:xargs [-0epn] command
选项与参数:
-0 :如果输入的 stdin 含有特殊字符,例如 `, , 空白键等等字符时,这个 -0 参数
可以将他还原成一般字符。这个参数可以用于特殊状态喔!
-e :这个是 EOF (end of file) 的意思。后面可以接一个字串,当 xargs 分析到这个字串时,
就会停止继续工作!
-p :在执行每个指令的 argument 时,都会询问使用者的意思;
-n :后面接次数,每次 command 指令执行时,要使用几个参数的意思。
当 xargs 后面没有接任何的指令时,默认是以 echo 来进行输出

xargs 是在做什么的呢?就以字面上的意义来看, x 是加减乘除的乘号,args 则是 arguments (参数) 的意思,所以说,这个玩意儿就是在产生某个指令的参数的意思! xargs 可以读入 stdin 的数据,并且以空白字符或断行字符作为分辨,将 stdin 的数据分隔成为 arguments 。 因为是以空白字符作为分隔,所以,如果有一些文件名或者是其他意义的名词内含有空白字符的时候, xargs 可能就会误判了

例如:将所有的 /etc/passwd 内的帐号都以 id 查阅,但查到 sync 就结束指令串
指令:cut -d ':' -f 1 /etc/passwd | xargs -e'sync' -n 1 id
#注意,那个 -e’sync’ 是连在一起的,中间没有空白键。
#第六个参数是 sync ,那么我们下达 -e’sync’ 后,则分析到 sync 这个字串时,
#后面的其他 stdin 的内容就会被 xargs 舍弃掉了

4. 管线中-号的作用

在管线命令当中,常常会使用到前一个指令的 stdout 作为这次的 stdin , 某些指令需要用到文件名称 (例如 tar) 来进行处理时,该 stdin 与 stdout 可以利用减号 “-” 来替代,

举例来说:
mkdir /tmp/homeback

tar -cvf - /home | tar -xvf - -C /tmp/homeback
上面这个例子是说:“我将 /home 里面的文件给他打包,但打包的数据不是纪录到文件,而是传送到 stdout;
经过管线后,将 tar -cvf - /home 传送给后面的 tar -xvf - ”。后面的这个 - 则是取用前一个指令的 stdout, 因此,我们就不需要使用 filename 了!这是很常见的例子。

总结:

管线的基本命令大致就是linux学习篇19和20。这两篇大部分都是结合了自己的实践,其中有部分的指令我用到的确实很少,就以书上的例子为准了。总的来说,还是收获颇丰。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

澄澈i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值