1. 程式人生 > >管道符常營命令以及特殊符號

管道符常營命令以及特殊符號

cut sort wc 符號

管道符常營命令

cut:截取字符串,比如我們要以“:”作為分隔符,取第一列,
[root@localhost ~]# cat /etc/passwd |head -5|cut -d ":" -f1
root
bin
daemon
adm
lp

這裏-d是指定分割符,-f後面接數字,是指截取範圍,上面的例子是截取第一段,就輸入-f1,如果想

截取兩段,就用“,”分開,後面再接一個數字。如f1,2。

如果是1-3段,後面就接1-3.

指定第幾個字符 -c

[root@localhost ~]# cat /etc/passwd |head -2|cut -c4
t

sort:排序,比如我們現在得到一列數字,或者是一列字符串,我們要由小到大做一個排序

[root@localhost ~]# sort /etc/passwd |head -1
adm:x:3:4:adm:/var/adm:/sbin/nologin
我們可以看到,sotr的排序是遵循英文字母的排序。這就是sort的作用。

sort -n會以數字大小去排序
[root@localhost ~]# sort -n 1.txt
<

{
}
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sync:x:5:0:sync:/sbin:/bin/sync
22223333
22222222222aaaaaaa
*我們需要註意的是,如果我們輸入-n,那麽文件裏面的特殊符號和字符會被認為是0。所以特殊符號和字母會排在前面。

sotr-r反向排序,與-n正好相反
[root@localhost ~]# sort -r 1.txt
sync:x:5:0:sync:/sbin:/bin/sync
1111111111133333333333
}

wc -l 統計行數
[root@localhost ~]# cat 1.txt | wc -l
20

wc -m 統計字符數
[root@localhost ~]# cat 1.txt | wc -m
499

wc -w 統計詞數,他是根據空格或者空白字符去分割的
[root@localhost ~]# cat 1.txt | wc -w
20

uniq去重復,他一般和sort在一起用,先排序,然後去重(最常用)

[root@localhost ~]# cat 2.txt
123
abc 1111,222
123
abc
1
1
2
然後我們排序,去重
[root@localhost ~]# sort 2.txt |uniq
1
123
2
abc
abc 1111,222

uniq -c統計重復次數
[root@localhost ~]# sort 2.txt |uniq -c
2 1
2 123
1 2
1 abc
1 abc 1111,222
tee:類似於>輸出重定向。>輸出重定向僅僅是將內容寫入到目標文件,對我們看不到任何的內容,成功與否。這時候我們就使用tee取代">"。它不僅可以將內容重定向到目標文件,也可以將內容打印到屏幕上。
[root@localhost ~]# sort 2.txt |uniq -c|tee a.txt
2 1
2 123
1 2
1 abc
1 abc 1111,222
這樣我們就可以看到輸出的內容了

tee -a追加,和>> 作用類似。但是在追加的同時將內容打印在屏幕上
[root@localhost ~]# sort 2.txt |uniq -c|tee -a a.txt
2 1
2 123
1 2
1 abc
1 abc 1111,222
[root@localhost ~]# cat a.txt
2 1
2 123
1 2
1 abc
1 abc 1111,222
2 1
2 123
1 2
1 abc

tr:替換字符,它支持寫多個字符
[root@localhost ~]# echo "aminglinux" |tr ‘[al]‘ ‘[AL]‘
AmingLinux
[root@localhost ~]# echo "aminglinux" |tr ‘a‘ ‘A‘
Aminglinux
全部替換成大寫
[root@localhost ~]# echo "aminglinux" |tr ‘[a-z]‘ ‘[A-Z]‘
AMINGLINUX

split:切割,將大文件切割成小文件。他有兩種用法,一種是 -b大小默認單位是字節 ,一種是 -l行數。(系統默認是以x開頭)
[root@localhost test]# split -b 1000 a.txt
[root@localhost test]# ls
a.txt xae xaj xao xat xay xbd xbi xbn xbs xbx xcc xch xcm xcr xcw xdb xdg xdl xdq xdv xea xef xek xep xeu xez xfe xfj
xaa xaf xak xap xau xaz xbe xbj xbo xbt xby xcd xci xcn xcs xcx xdc xdh xdm xdr xdw xeb xeg xel xeq xev xfa xff xfk
xab xag xal xaq xav xba xbf xbk xbp xbu xbz xce xcj xco xct xcy xdd xdi xdn xds xdx xec xeh xem xer xew xfb xfg xfl
xac xah xam xar xaw xbb xbg xbl xbq xbv xca xcf xck xcp xcu xcz xde xdj xdo xdt xdy xed xei xen xes xex xfc xfh xfm
xad xai xan xas xax xbc xbh xbm xbr xbw xcb xcg xcl xcq xcv xda xdf xdk xdp xdu xdz xee xej xeo xet xey xfd xfi
這就將a.txt按1000b切割完成了。

我們也可以切割完後給他命名,不用系統給我們的名字,但是我們只能自定義它的前綴。

s[root@localhost test]# split -b 100k a.txt abc

[root@localhost test]# ls
abcaa abcab a.txt xaa xab

split -l按行切割,比如我們都按照1000行切割
[root@localhost test]# split -l 1000 a.txt
[root@localhost test]# wc -l *
1000 xaa
1000 xab
1000 xac
這樣每個文件都是1000行。

後面接目標文件,就可以直接清空裏面的內容。
[root@localhost ~]# > a.txt
[root@localhost ~]# cat a.txt

註釋符
#:在#號後面輸入的shell都不回生效,它的作用是解釋說明。

$:變量前綴,!$組合,這則裏面表示行位

;多條命名寫到一行,用分號分割
[root@localhost ~]# ls 1.txt; wc -l 2.txt
1.txt
7 2.txt

~:用戶的家目錄,在正則表達式裏表示匹配符

&:命令放到後臺去

:輸出重定向,會把目標的內容全部替換
>:追加重定向,會將內容追加到目標內容的結尾處
2>:錯誤輸出重定向,和輸出重定向作用一樣
2>>:最佳錯誤重定向,和追加重定向作用一樣。
&>:直接把正確和錯誤直接輸入到目標文件中

【】:指定字符中的一個,經常用於替換,比如【0-9】,【a-zA-Z】,【abc】。

||:在shell代表或者,它用在兩條命令中間。如果第一條命令執行成功,它就不會執行第二條命令,如果執行不成功,它就會執行第二條命令。
[root@localhost ~]# ls 1a.txt|| wc -l 2.txt
ls: 無法訪問1a.txt: 沒有那個文件或目錄
7 2.txt
第一條命令沒有成功,它就執行了第二條
[root@localhost ~]# ls 1.txt|| wc -l 2.txt
1.txt
第一條命令成功了,它就不執行第二條。

&&:讓兩個命令連續執行,只有前面命令執行成功,後面命令才繼續執行。
[root@localhost ~]# ls 1.txt&& wc -l 2.txt
1.txt
7 2.txt
只有前一個命令執行成功,後一個才會執行
[root@localhost ~]# ls 1a.txt&& wc -l 2.txt
ls: 無法訪問1a.txt: 沒有那個文件或目錄
如果前一個命令不成功,那麽後一條命名就不會執行。

我們可以將||和&&理解成一個判斷,||只有前面的命令不成功的時候才執行後面的命令,&&只有前面命令成功的時候才會執行後面的命令。

管道符常營命令以及特殊符號