Linux学习[20]管线命令详解2 您所在的位置:网站首页 ntfs分区最大多少 Linux学习[20]管线命令详解2

Linux学习[20]管线命令详解2

2023-06-28 22:22| 来源: 网络整理| 查看: 265

文章目录 前言1. 字符转换命令1.1 tr1.2 col1.3 join1.4 paste1.5 expand 2. 分区命令split3. 参数代换xargs4. 管线中`-`号的作用总结:

前言

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

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。这两篇大部分都是结合了自己的实践,其中有部分的指令我用到的确实很少,就以书上的例子为准了。总的来说,还是收获颇丰。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有