歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> [Linux]管道命令

[Linux]管道命令

日期:2017/3/1 13:37:40   编辑:關於Linux

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不支持管道命令。
Copyright © Linux教程網 All Rights Reserved