linux 管线命令
2018-07-10 本文已影响0人
liwsh
有时候我们需要的数据,需要经过几个命令加工出来。
比如从日志文件查找monitorService字符串,并且显示最后10个符合条件的行。我们一般会这么写 grep monitorService XXX.log | tail -10。 | 就是连接2个命令的标记,|后面的就是管线命令,管线命令是能够接收数据的命令。tail接收了grep后的结果,并且做了处理,取最后的10行。
下面介绍几种管线命令
1. cut
cut
- -d :后面接分隔字符。与 -f 一起使用;
- -f :依据 -d 的分隔字符将一段讯息分区成为数段,用 -f 取出第几段的意思;
- -c :以字符 (characters) 的单位取出固定字符区间;
比如:last | cut -d ' ' -f 1,表示按照空格切割,取第一个字段
2. sort
- -f :忽略大小写的差异,例如 A 与 a 视为编码相同;
- -n :使用『纯数字』进行排序(默认是以文字型态来排序的);
- -r :反向排序;
- -u :就是 uniq ,相同的数据中,仅出现一行代表;
- -t :分隔符,预设是用 [tab] 键来分隔;
- -k :以那个区间 (field) 来进行排序的意思
cat /etc/passwd | sort -t ':' -k 3 -n 表示用:分隔之后,按照第三个字段排序,用数字的形式
3. wc
- -l :仅列出行;
- -w :仅列出多少字(英文单字);
- -m :多少字符;
4. split
split [-bl] file PREFIX
- -b :后面可接欲分区成的文件大小,可加单位,例如 b, k, m 等;
- -l :以行数来进行分区。
- PREFIX :代表前导符的意思,可作为分区文件的前导文字。
cd /tmp; split -b 300k /etc/services sub-ser
表示将/etc/services文件按照300k一个,分割成多个以sub-ser打头的文件
5. xargs
xargs 可以读入 stdin 的数据,并且以空格符或断行字符作为分辨,将 stdin 的资料分隔成为 arguments
- -0 :如果输入的 stdin 含有特殊字符,例如 `, , 空格键等等字符时,这个 -0 参数 可以将他还原成一般字符。这个参数可以用于特殊状态喔!
- -e :这个是 EOF (end of file) 的意思。后面可以接一个字符串,当 xargs 分析到这个字符串时, 就会停止继续工作!
- -p :在执行每个指令的 argument 时,都会询问使用者的意思;
- -n :后面接次数,每次 command 指令执行时,要使用几个参数的意思。
cut -d ':' -f 1 /etc/passwd | xargs -e'sync' -n 1 id
id命令只能接收一个参数,所以是-n 1,-e'sync'表示读取到sync就结束。xargs还可以给不支持管线命令的命令提供stdin,比如:
find /usr/sbin -perm /7000 | xargs ls -l