[Linux]管道命令 ”|“
2016-01-04 11:03
357 查看
[Linux]管道命令2014-01-10 0 个评论
来源:Zhu_Julian's Notes (朱显杰的技术博客) 收藏
我要投稿
Linux的管道命令是'|',通过它可以对数据进行连续处理,其示意图如下:
注意:
1)管道命令仅为处理标准输出(即正确的输出),对于标准错误输出,将忽略
2)管理命令的后一个命令必须能将前一个命令的标准输出变为它的标准输入才可以,如less,more,head,tail就可以,而ls, cp, mv就不行。
下面我们看几个管道命令。
cut有一个问题,就是在处理多个空格分隔的时候比较吃力。
从上面的结果我们可以知道,sort默认是以第一个字符升序排序,如果我想要以第3列降序数字排序怎么办?
如果没有xargs,ls -l的结果将不是前面find的标准输出,因为ls不支持管道命令。
-t 表示先打印命令,然后再执行。
$ cat 1.txt |xargs -t echo
echo aaa bbb ccc ddd a b
aaa bbb ccc ddd a b
-i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给{},可以用{}代替。
$ ls
1.txt 2.txt 3.txt log.xml
$ ls *.txt |xargs -t -i mv {} {}.bak
mv 1.txt 1.txt.bak
mv 2.txt 2.txt.bak
mv 3.txt 3.txt.bak
来源:Zhu_Julian's Notes (朱显杰的技术博客) 收藏
我要投稿
Linux的管道命令是'|',通过它可以对数据进行连续处理,其示意图如下:
注意:
1)管道命令仅为处理标准输出(即正确的输出),对于标准错误输出,将忽略
2)管理命令的后一个命令必须能将前一个命令的标准输出变为它的标准输入才可以,如less,more,head,tail就可以,而ls, cp, mv就不行。
下面我们看几个管道命令。
cut - 列选取命令
cut以行为单位,根据分隔符把行分成若干列,这样我们就可以指定选取哪些列了。cut -d '分隔字符' -f 选取的列数 echo $PATH|cut -d ':' -f 2 --选取第2列 echo $PATH|cut -d ':' -f 3,5 --选取第3列和第5列 echo $PATH|cut -d ':' -f 3-5 --选取第3列到第5列
cut有一个问题,就是在处理多个空格分隔的时候比较吃力。
grep - 行选取命令
grep分一行数据,若当中有我们所需要的信息,则显示该行,否则忽略。grep [-cinv] '查找的字符串' filename -c:计算找到的次数 -i:忽略大小写 -v:反向选择 -n:输出第几行
sort - 排序
# cat /etc/passwd | sort adm:x:3:4:adm:/var/adm:/sbin/nologin avahi-autoipd:x:100:156:avahi-autoipd:/var/lib/avahi-autoipd:/sbin/nologin avahi:x:70:70:Avahi daemon:/:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin ......
从上面的结果我们可以知道,sort默认是以第一个字符升序排序,如果我想要以第3列降序数字排序怎么办?
# cat /etc/passwd | sort -t ':' -k 3 -rn nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin test:x:504:505::/home/test:/bin/bash sungh:x:503:504::/home/sungh:/bin/bash zhoufei:x:502:503::/home/zhoufei:/bin/bas
uniq - 去重
该命令用于排完序之后,对排序结果进行去重1 wtmp [root@lx15 ~ ]# last | cut -d ' ' -f 1 | sort | uniq oracle reboot root test wtmp [root@lx15 ~ ]# last | cut -d ' ' -f 1 | sort | uniq -c 1 22 oracle 9 reboot 521 root 12 test 1 wtmp
wc - 统计
wc [-lwm] -l: 统计行数 -w:统计英文单词 -m:统计字符数 [root@lx15 ~ ]# wc -l /etc/passwd 37 /etc/passwd [root@lx15 ~ ]# wc -w /etc/passwd 62 /etc/passwd [root@lx15 ~ ]# wc -m /etc/passwd 1711 /etc/passwd
split - 文件切割
split [-bl] file prefix -b: 以大小切割 -l:以行数切割 prefix:切割后文件的前缀 --示例:以大小切割 [root@lx15 ~ ]# ls -l disease.dmp -rwxr-xr-x 1 root root 127485952 Jul 4 2013 disease.dmp [root@lx15 ~ ]# ls -lh disease.dmp -rwxr-xr-x 1 root root 122M Jul 4 2013 disease.dmp [root@lx15 ~ ]# split -b 50m disease.dmp disease.dmp [root@lx15 ~ ]# ls -lh disease.dmp* -rwxr-xr-x 1 root root 122M Jul 4 2013 disease.dmp -rw-r--r-- 1 root root 50M Jan 9 16:10 disease.dmpaa -rw-r--r-- 1 root root 50M Jan 9 16:10 disease.dmpab -rw-r--r-- 1 root root 22M Jan 9 16:10 disease.dmpac
xargs - 参数代换
不是所有的命令都支持管道,如ls,对于不支持管道的命令,我们可以通过xargs让其有管道命令的效果,如下所示:# find /sbin -perm +7000 | xargs ls -l -rwsr-x--- 1 root ecryptfs 19896 Feb 23 2012 /sbin/mount.ecryptfs_private -rwsr-xr-x 1 root root 75496 Jan 9 2013 /sbin/mount.nfs -rwsr-xr-x 1 root root 75504 Jan 9 2013 /sbin/mount.nfs4 -rwxr-sr-x 1 root root 8544 Feb 22 2012 /sbin/netreport -rwsr-xr-x 1 root root 14112 Nov 2 2010 /sbin/pam_timestamp_check -rwsr-xr-x 1 root root 75504 Jan 9 2013 /sbin/umount.nfs -rwsr-xr-x 1 root root 75504 Jan 9 2013 /sbin/umount.nfs4 -rwsr-xr-x 1 root root 19768 Nov 2 2010 /sbin/unix_chkpwd
如果没有xargs,ls -l的结果将不是前面find的标准输出,因为ls不支持管道命令。
Xargs用法详解
http://blog.csdn.net/zhangfn2011/article/details/6776925Xargs用法详解(转载)
http://blog.csdn.net/hwz2311245/article/details/48085241-t 表示先打印命令,然后再执行。
$ cat 1.txt |xargs -t echo
echo aaa bbb ccc ddd a b
aaa bbb ccc ddd a b
-i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给{},可以用{}代替。
$ ls
1.txt 2.txt 3.txt log.xml
$ ls *.txt |xargs -t -i mv {} {}.bak
mv 1.txt 1.txt.bak
mv 2.txt 2.txt.bak
mv 3.txt 3.txt.bak
相关文章推荐
- Linux kernel编译生成的版本多一个加号“+”
- VirtualBox CentOS6.3共享目录设置
- 在centos6.5上面mount微软系统上安装ftp服务器
- linux下配置SuperMap(非本机)许可服务器的ip
- Linux USB驱动框架分析
- Centos 6.5 下搭建Mysql 5.6双主模式
- [转载]你需要知道的 16 个 Linux 服务器监控命令
- linux如何设置时区
- linux的nohup命令的用法
- linux tune2fs命令详解
- Linux 查看内存,CPU及硬盘大小的方法
- Linux设置ssh免密码登录
- Linux系统手动安装rzsz 软件包
- [转载]Linux服务器性能评估与优化
- LINUX VPS主机之间快速复制备份搬家
- arm-linux-androideabi-ld.exe 编译错误的问题
- Linux环境下静态库的生成和使用 (.a文件)
- Linux环境下动态库的生成和使用 (.so文件)
- centos6.5 安装JDK
- Linux常用经典命令