Linux學習記錄--管道命令

管道命令

 

選取命令:cut,grep正則表達式

排序命令:sort,wc,uniqvim

雙重數據量:teebash

字符轉換命令:tr,expand,colide

切割命令:splitui

參數代換:xargs編碼

 

管道命令與連續命令不一樣,連續命令中的各個命令不存在相關性只是順序執行。spa

對於管道命令來講cmd1|cmd2.unix

cmd2須要cmd1產生的輸出流做爲cmd2的輸入流,命令之間存在很強的依賴關係,而且管道命令只能處理正確的輸出數據流排序

選取命令

 

cut

 

從某一行將一段信息切出來ci

語法:cut –d ‘分割字符’  -f field

             cut –c 字符範圍

選項與參數:

-d:後接分割字符與-f連用

-f:獲取經-d分割後的第幾個字段

-c:以字符的單位取出固定字符區間,適用於排列正確的信息

選取範圍a-b 若是是從第a個字符到最後可寫成a-

說明:cut能夠進行單行與多行分割,對於多行每一行都看作單獨的一行分割與獲取field

舉例1:單行分割

[root@localhost ~]# echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin
[root@localhost ~]# echo $PATH |cut -d ':' -f 1
/usr/kerberos/sbin
[root@localhost ~]# echo $PATH |cut -d '
/usr/kerberos/sbin:/usr/local/sbin


舉例2:多行分割

[root@localhost ~]# last -5
root     pts/1        :0.0             Wed Mar  5 09:41   still logged in   
root     :0                            Wed Mar  5 09:40   still logged in   
root     :0                            Wed Mar  5 09:40 - 09:40  (00:00)    
reboot   system boot  2.6.18-371.el5   Wed Mar  5 09:20          (05:08)    
root     pts/1        :0.0             Tue Mar  4 15:27 - crash  (17:53)    
[root@localhost ~]# last -5|cut -d ' ' -f 1
root
root
root
reboot
root

舉例3:範圍選取

[root@localhost ~]# export
declare -x COLORTERM="gnome-
declare -x DBUS_SESSION_BUS_
declare -x DESKTOP_SESSION="
declare -x DESKTOP_STARTUP_I
declare -x DISPLAY=":0.0"
[root@localhost ~]# export|cut -c 12-
COLORTERM="gnome-terminal"
DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-OeMZpvhP93,guid=30f2d841bcc5b92980611600531680a3"
DESKTOP_SESSION="default"
DESKTOP_STARTUP_ID=""
DISPLAY=":0.0"

 

grep

 

分析一行信息,若當中存在咱們須要的信息,則將該行輸出,grep後還可接正則表達式或通配符進行查詢。

語法:grep [-acinv] [-A] [-B] [--color=auto] ‘查找字符串’ filename

選項與參數:

-a:binary文件以text文件方式查找數據

-c:計算‘查找字符串’次數

-i:忽略大小寫

-n:輸出行號

-v:反向選擇

-A:後面可跟數字,表明除了本行外,後續的n行也都列出來

-B: 後面可跟數字,表明除了本行外,前面的n行也都列出來

--color=auto: 關鍵字部分添加顏色

舉例:

[root@localhost ~]# last -3|grep 'root'
root     pts/1        :0.0             Wed Mar  5 09:41   still logged in   
root     :0                            Wed Mar  5 09:40   still logged in   
root     :0                            Wed Mar  5 09:40 - 09:40  (00:00)    
[root@localhost ~]# last -5|grep -vn 'root'
4:reboot   system boot  2.6.18-371.el5   Wed Mar  5 09:20          (05:33)    
6:
7:wtmp begins Fri Feb 14 10:32:51 2014
[root@localhost ~]# last |grep -c 'root'
84
[root@localhost ~]# last -5|grep -n 'roo*' = >通配符查找
1:root     pts/1        :0.0             Wed Mar  5 09:41   still logged in 
2:root     :0                            Wed Mar  5 09:40   still logged in 
3:root     :0                            Wed Mar  5 09:40 - 09:40  (00:00)  
5:root     pts/1        :0.0             Tue Mar  4 15:27 - crash  (17:53)  

 

排序命令

 

sort

 

sort能夠按照不一樣的數據類型來排序,例如按數字或文字排序,排序結果也受語系編碼的影響,例若有的語系字符是這麼排序的AaBbCc….建議語系使用LANG=C

語法:sort [-fbMnrtuk]文件或輸入流

選項與參數:

-f:忽略大小寫

-b:忽略最前面的空格

-M:以月份(英文)來排序

-r:反向排序

-t:分隔符與-k連用

-u:就是uniq

-k:以那個field的進行排序

舉例1

[root@localhost ~]# cat /etc/passwd |sort -
avahi:x:70:70:Avahi daemon:/:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
cimsrvr:x:100:500:tog-pegasus OpenPegasus WBEM/CIM services:/var/lib/Pegasus:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

舉例2:用‘:’分割第三段進行排序

[root@localhost ~]# cat /etc/passwd |sort -t ':' -k 3
root:x:0:0:root:/root:/bin/bash
cimsrvr:x:100:500:tog-pegasus OpenPegasus WBEM/CIM services:/var/lib/Pegasus:/sbin/nologin
luci:x:101:101::/var/lib/luci:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

uniq

 

將重複的數據僅列出一列

語法:uniq [-ic]

選項與參數:

-i:忽略大小寫

-c:進行計數

舉例:

[root@localhost ~]# last|cut -d ' ' -f 1 |sort|uniq -c|sort -n
      1 wtmp
      3 tkf
     26 reboot
     84 root
 => last|cut -d ' ' -f 1 |sort 截取登陸名並排序
=> uniq -c刪除重複列,並計數
=>sort –n 按照計數排序

wc

 

wc能夠幫助咱們統計文件字符信息

語法:wc [lwm]

選項與參數:

-i:僅列出行

-w:僅列初子

-m:字符數

舉例:

[root@localhost ~]# wc /etc/man.config 
141  722 4617 /etc/man.config
[root@localhost ~]# cat /etc/man.config |wc
    141     722    4617
=>分別表明行數,字數,字符數

雙重數據流(tee)

 

前面提到輸出數據流介質能夠是設備或文件,但數據流只能被一個介質所有接收,那麼若是但願數據能夠被2個介質接收就須要使用雙重數據流,簡單的說,若是你既想將輸出數據流保存到文件也想同時控制檯也會顯示,那你就須要使用這個了

語法:tee [-a] file

選項與參數:-a:以累加的方式進行添加

舉例

[root@localhost ~]# export|tee export.list|cut -c 12-
COLORTERM="gnome-terminal"
DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-OeMZpvhP93,guid=30f2d841bcc5b92980611600531680a3"
DESKTOP_SESSION="default"
[root@localhost ~]# vim export.list
declare -x COLORTERM="gnome-terminal"
declare -x DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-OeMZpvhP93,guid=30f2d841bcc5b92980611600531680a3"
declare -x DESKTOP_SESSION="default"

字符轉換命令

 

tr

 

tr能夠用來刪除和替換一些文字信息

說明,tr只是改變輸出內容,並不會真正去修改文件的內容

語法:tr –d  ‘字符

             tr –s  ‘原字符’‘替換字符

選項與參數:

-d:刪除

-s:替換

舉例:

trfile文件內容
abcdefgh
abcdefgh
abcdefgh
[root@localhost ~]# cat trfile |tr -s 'b' 'B'  =>替換
aBcdefgh
aBcdefgh
aBcdefgh
[root@localhost ~]# cat trfile |tr -d 'b'  =>刪除
acdefgh
acdefgh
acdefgh

=>操做結束後trfile文件內容不會有任何改變

col

 

col主要將一些特殊字符進行轉換

 

語法:col [-xb]

選項與參數:

-x:tab鍵轉成相應的空格

-b:在文字內有反斜槓,僅保留反斜槓後面接的那個字符

舉例1:去掉反斜槓(^H)

[root@bogon ~]# man col > /root/col.man
[root@bogon ~]# cat -A /root/col.man|more 
N^HNA^HAM^HME^HE$
     c^Hco^Hol^Hl - filter reverse line feeds from input$

[root@bogon ~]# man col |col -b > /root/col.b.man
[root@bogon ~]# cat -A /root/col.b.man|more 
     col - filter reverse line feeds from input$


舉例2:將TAB轉換爲空格 (^I)

[root@bogon ~]# cat -A /etc/man.config|more # MANPATH^I/opt/*/man$
# MANPATH^I/usr/lib/*/man$
# MANPATH^I/usr/share/*/man$
# MANPATH^I/usr/kerberos/man$

[root@bogon ~]# cat /etc/man.config |col -x > /root/man.tab.config
[root@bogon ~]# cat -A /root/man.tab.config|more
# MANBIN                pathname$
# MANPATH               manpath_element [corresponding_catdir]$
# MANPATH_MAP           path_element    manpath_element$

expand

 

[tab]按鍵轉爲空格鍵

語法:expand [–t] file

選項與參數:

-t:[tab] 按鍵替換多少個空格字符

舉例

[root@localhost ~]# grep '^MANPATH' /etc/man.config |head -n 3|cat -A
MANPATH^I/usr/man$
MANPATH^I/usr/share/man$
MANPATH^I/usr/local/man$
[root@localhost ~]# grep '^MANPATH' /etc/man.config |head -n 3|expand -6|cat -A
MANPATH     /usr/man$
MANPATH     /usr/share/man$
MANPATH     /usr/local/man$

切割命令(split)

 

語法:split [-bl] file PREFIX

選項與參數:

-b:後面可接欲切割的文件大小

-1:以行數進行切割

PREFIX:切割後文件的前導符

舉例1:切割文件

[root@localhost ~]# ll -h /etc/termcap 
-rw-r--r-- 1 root root 789K 2007-01-07 /etc/termcap
[root@localhost ~]# split -b 300k /etc/termcap newter
[root@localhost ~]# ll -h newter*
-rw-r--r-- 1 root root 300K 03-06 09:56 newteraa
-rw-r--r-- 1 root root 300K 03-06 09:56 newterab
-rw-r--r-- 1 root root 189K 03-06 09:56 newterac

舉例:合成文件

[root@localhost ~]# cat newter* >> termap-back
[root@localhost ~]# ll -h termap-back 
-rw-r--r-- 1 root root 789K 03-06 10:02 termap-back

參數代換(xargs)

 

參數代換的做用:

1.做爲某些指令的參數。好比which, finger ,find ,whereis 

2.做爲某些不支持管道命令的輸入數據流

語法:xargs [-epn] command

選項與參數:

-e:就是EOF的意思,後面可接一個字符串,當分析到這個字符串時,就會中止繼續工做

-p:在執行每一個參數時,都會詢問用戶

-n:後面接次數,執行command的次數

舉例1:指令參數

[root@localhost ~]# cat ./xargsfile 
cd 
ll
grep
[root@localhost ~]# cut -d ' ' -f 1 ./xargsfile|xargs whereis
cd: /usr/share/man/man1p/cd.1p.gz /usr/share/man/man1/cd.1.gz
ll:
grep: /bin/grep /usr/share/man/man1p/grep.1p.gz /usr/share/man/man1/grep.1.gz

舉例2:做爲輸入數據流

[root@localhost ~]# find /sbin/ -perm +7000|ls -l
總計 227644
-rw------- 1 root root      1377 02-14 10:29 anaconda-ks.cfg
drwxr-xr-x 2 root root      4096 02-21 13:30 Desktop
…….
=>ls 不支持管道命令,一次查詢的結果是~/下的內容
[root@localhost ~]# find /sbin/ -perm +7000|xargs ls -l
-rwsr-xr-x 1 root root 73108 10-02 05:10 /sbin/mount.nfs
-rwsr-xr-x 1 root root 73112 10-02 05:10 /sbin/mount.nfs4
…..
=>將find查詢到的內容做爲輸入數據流供ls使用
相關文章
相關標籤/搜索