Zbrel 发表于 2017-8-7 22:32:33

认识bash shell5--管道命令(pipe)之split,xargs,减号

分割命令split:可以将一个大啊、档案,依据档案大小或行数来分割,就可以将大档案分割成小档案了。
split [-b] file PREFIX
-b :后面可接欲分割成的档案大小,可加单位,例如 b, k, m 等;
-l :以行数来进行分割。
PREFIX :代表前导符的意思,可作为分割档案的前导文字。
例如:将700多k的档案分成300k的一个档案:split -b 300k /etc/term term 档名随意取,只要写上前导文字,小档案就会以xxxaa, xxxab, xxxac等方式来建立小档案。
将上面分割的小档案合成一个档案:cat term* >> term
使用ls -al /输出的信息中,没十行记录成一个档案:ls -al / | split -l 10 lsroot

参数代换xargs: x 是加减乘除的乘号,args 则是 arguments (参数)的意思,这个就是在产生某个指令的参数的意思。xargs 可以读入 stdin 的数据,并且以空格符或断行字符作为分辨,将 stdin 的资料分隔成为 arguments 。
xargs [-Open] command
-0 :如果输入的stdin 含有特殊字符,例如 `, \, 空格键等字符时,这个 -0 参
数可以将它还原成一般字符。这个参数可以用于特殊状态!
-e :这个是 EOF (end of file) 的意思。后面可以接一个字符串,当 xargs 分析
到这个字符串时,就会停止继续工作!
-p :在执行每个指令的 argument 时,都会询问使用者的意思;
-n :后面接次数,每次 command 指令执行时,要使用几个参数的意思。
当xargs后面没有接任何的指令时,默认是以echo来进行输出。
例如:将 /etc/passwd 内的第一栏取出,仅取三行,使用 finger 这个指令将,每个账号内容秀出来:cut -d ':' -f 1 /etc/passwd |head -n 3| xargs finger
同上,但是每次执行 finger 时,都要询问使用者是否动作:cut -d ':' -f 1 /etc/passwd |head -n 3| xargs -p finger
将所有的 /etc/passwd 内的账号都以 finger 查阅,但一次仅查阅五个账号:cut -d ':' -f 1 /etc/passwd |head -n 3| xargs -p -n 5 finger
同上,但是当分析到 lp 就结束这串指令:
cut -d':' -f1 /etc/passwd | xargs -p -e 'lp' finger

关于减号-的用途:在管线命令当中,常常会使用到前一个指令的 stdout 作为这次的
stdin , 某些指令需要用到文件名 (例如 tar) 来进行处理时,该 stdin 与 stdout 可以利用减号 "-" 来替代。
例如:tar -cvf - /home | tar -xvf - 将/home 里面的档案给他打包,传送到stdout;经过管线后,将 tar -cvf - /home 传送给后面的 tar -xvf -。后面的这个 - 则是取用前一个指令的 stdout, 因此,我们就不需要使用 file 了!
页: [1]
查看完整版本: 认识bash shell5--管道命令(pipe)之split,xargs,减号