前言
接上一讲,这篇博客就如标题所见,对字符转换命令,分区命令以及参数代换进行阐述。这篇博客的东西说实话我平时用的不是很多,也是看书的时候才知道。既然看到了,那就顺便归纳记一下吧。
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。这两篇大部分都是结合了自己的实践,其中有部分的指令我用到的确实很少,就以书上的例子为准了。总的来说,还是收获颇丰。