25.shell特殊符號cut命令 sort wc uniq tee tr split命令

8.10 shell特殊符號cut命令linux

8.11 sort wc uniq命令正則表達式

8.12 tee tr split命令shell

8.13 shell特殊符號下vim

 

8.10 shell特殊符號cut命令:bash

~1. *任意個任意字符排序

通配符it

~2. ?任意一個字符test

表明任意的一個字符後臺

~3. #註釋字符變量

前面加#,表明不生效。可用在解釋說明

~4. \脫義字符 (詳細看實例)

取消掉原意,只表明他自己,可用\

~5. |管道符 下面有講和管道符有關的命令

 

 

 

 

實例

4.

[root@axinlinux-01 ~]# a=1

[root@axinlinux-01 ~]# b=2

[root@axinlinux-01 ~]# c=$a$b 咱們想讓c=$a$b這串字符自己是不生效的,由於咱們用$會調用a的變量

[root@axinlinux-01 ~]# echo $c 因此他會顯示,a和b的變量

12

[root@axinlinux-01 ~]# c='$a$b' 咱們能夠加單引號來表明c=$a$b的自己

[root@axinlinux-01 ~]# echo $c

$a$b

[root@axinlinux-01 ~]# c=\$a\$b 也能夠用脫義字符\反推一下,來表明$a或$b這些字符自己

[root@axinlinux-01 ~]# echo $c

$a$b

 

----------------------------------------------------------------------------------------------------------------------------------------------------

 

8.11 sort wc uniq命令:

 

幾個和管道有關的命令

~1. cut分割,-d分隔符 -f指定段號 -c指定第幾個字符

~2. sort排序,-n以數字排序 -r反序 -t分隔符 -kn1/-kn1,n2

遵循阿斯瑪ASCII排序

-n會以數字排序,字母和特殊字符會默認爲0.需注意

-nr會以數字反序來排列。跟-n是相反的

-t指定幾段去排序,幾乎用不到,做爲了解

~3. wc -l統計行數 -m統計字符數 -w統計詞

-l統計行數,以前用過

-m統計字符數時,也會統計隱藏字符,好比換行符$

-w以空白字符做爲分隔符,來統計有多少詞 用的很少,做爲了解

~4. uniq去重,-c統計行數

通常跟sort同時使用,先排序,後去重。sort 2.txt |uniq

 

 

實例:

1.

[root@axinlinux-01 ~]# cat /etc/passwd | head -2 咱們列出passwd的前兩行

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

[root@axinlinux-01 ~]# cat /etc/passwd | head -2 |cut -d ":" -f 1 用cut分割,-d表示用什麼分割,用雙引號引發來。-f表示分隔符:的第一段

root

bin

[root@axinlinux-01 ~]# cat /etc/passwd | head -2 |cut -d ":" -f 1,2 cut一二段的時候用,分割

root:x

bin:x

[root@axinlinux-01 ~]# cat /etc/passwd | head -2 | cut -d ":" -f 1-3 cut一二三段的時候,直接寫1-3便可

root:x:0

bin:x:1

[root@axinlinux-01 ~]# cat /etc/passwd |head -2 |cut -c 4 用-c的時候就不要用-d -f了,指定第幾個字符。前兩行的第四個字符就是 t和:

t

:

2.

[root@axinlinux-01 ~]# sort /etc/passwd 會發現sort後的排序是按照abcdefg來排序的

adm:x:3:4:adm:/var/adm:/sbin/nologin

bin:x:1:1:bin:/bin:/sbin/nologin

chrony:x:998:996::/var/lib/chrony:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@axinlinux-01 ~]# head /etc/passwd >> 1.txt 咱們再來追加一些到1.txt

[root@axinlinux-01 ~]# vim !$ 並在裏面加點特殊字符

vim 1.txt

[root@axinlinux-01 ~]# sort 1.txt 在sort,他會這樣排序

222eqweqw

%231243214214214

[244234

adm:x:3:4:adm:/var/adm:/sbin/nologin

!asrar

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

halt:x:7:0:halt:/sbin:/sbin/halt

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

root:x:0:0:root:/root:/bin/bash

]saffsdfds

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

sync:x:5:0:sync:/sbin:/bin/sync

 

3.

[root@axinlinux-01 ~]# wc -l 22.txt 行數 3行

3 22.txt

[root@axinlinux-01 ~]# wc -m 22.txt 統計字符數,隱藏字符也會統計,好比換行符$

9 22.txt

[root@axinlinux-01 ~]# cat -A 22.txt 用cat -A就能夠看到換行符

111$

222$

$

[root@axinlinux-01 ~]# wc -w 22.txt

2 22.txt

[root@axinlinux-01 ~]# cat !$

cat 22.txt

111

222

 

4.

[root@axinlinux-01 ~]# cat 2.txt 先cat一下

33

555

666

555

666111

333

444

333

555

666

[root@axinlinux-01 ~]# uniq 2.txt uniq並無什麼效果,由於沒有sort

33

555

666

555

666111

333

444

333

555

666

[root@axinlinux-01 ~]# sort 2.txt | uniq 咱們先sort再uniq,就去重了

33

333

444

555

666

666111

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------

 

8.12 tee tr split命令:

 

~5. tee和>相似,重定向的同時還在屏幕顯示

須要加|,|tee這樣來用

tee -a追加的效果,並在屏幕上顯示。相似於>>

~6. tr替換字符,tr 'a' 'b',大小寫替換tr '[a-z]' '[A-Z]'

~7. split 切割,-b大小(默認單位字節),-l行數

將一個大文件切割成多個小文件

 

實例:

 

5.

[root@axinlinux-01 ~]# sort 2.txt |uniq -c >a.txt 用>並不會顯示在屏幕上

[root@axinlinux-01 ~]# sort 2.txt |uniq -c |tee a.txt 將>換成|tee,重定向的同時還能打印在屏幕上

1 33

2 333

1 444

3 555

2 666

1 666111

 

6.

[root@axinlinux-01 ~]# echo 'aminglinux' |tr 'a' 'b'

bminglinux

[root@axinlinux-01 ~]# echo 'aminglinux' |tr 'a-z' 'A-Z'

AMINGLINUX

[root@axinlinux-01 ~]# echo 'aminglinux' |tr '[al]' '[AL]' 支持多個,但要加[]

AmingLinux

 

7.

[root@axinlinux-01 ~]# find /etc/ -type f -name '*conf' -exec cat {} >> a.txt \;

[root@axinlinux-01 ~]# du -sh a.txt

448K a.txt

[root@axinlinux-01 test]# split -b 100k a.txt 指定100k一個分割

[root@axinlinux-01 test]# ls

a.txt xaa xab xac 不指定名字以x開頭

[root@axinlinux-01 test]# split -b 100k a.txt abc. 指定名字爲abc.開頭

[root@axinlinux-01 test]# ls

abc.aa abc.ab abc.ac a.txt xaa xab xac

[root@axinlinux-01 test]# split -l 1000 a.txt abc. 指定1000行一個分割

[root@axinlinux-01 test]# ls

abc.aa abc.ab abc.ac abc.ad abc.ae abc.af abc.ag a.txt xaa xab xac

 

----------------------------------------------------------------------------------------------------------------------------------------------------

 

8.13 shell特殊符號下:

 

~1. $變量前綴。!$組合,正則裏面表示行尾

~2. ;多條命令寫到一行。用分號分割

~3. ~用戶家目錄,後面正則表達式表示匹配符

~4. &放到命令後面,會把命令丟到後臺

~5. > >> 2> 2>> &>

&>表示正確的和錯誤的都輸入到一個文件裏去

~6. []指定字符中的一個,[0-9],[a-zA-Z],[abc]

~7. ||和&&,用於命令之間

||運行在shell當中表示或者的意思

||放在兩條命令之間,前面的命令執行不成功會執行後面的命令。前面的執行成功不在執行後面的

 

&&與||相反

&&放在兩條命令之間,前面的命令執行成功纔會執行後面的命令。前面的命令不成功不會執行後面的命令

 

 

實例:

2.

[root@axinlinux-01 ~]# du -sh 22.txt ; wc -l 2.txt 多條命令之間用;分割

12K 22.txt 顯示兩條不一樣的命令

10 2.txt

 

7.

[root@axinlinux-01 ~]# ls

1.txt 22.txt 2.txt anaconda-ks.cfg

[root@axinlinux-01 ~]# ls 11.txt || wc -l 2.txt ||前面執行不成功,才執行後面的

ls: 沒法訪問11.txt: 沒有那個文件或目錄

10 2.txt

[root@axinlinux-01 ~]# ls 1.txt || wc -l 2.txt ||前面執行成功,不執行後面的

1.txt

[root@axinlinux-01 ~]# ls 1.txt && wc -l 2.txt &&前面的執行成功,才執行後面的

1.txt

10 2.txt

[root@axinlinux-01 ~]# ls 11.txt && wc -l 2.txt &&前面的執行不成功,不執行後面的

ls: 沒法訪問11.txt: 沒有那個文件或目錄

 

 

 

擴展實例:

若是一個目錄不存在,我才建立

[ -d axin ]

[root@axinlinux-01 ~]# ls

1.txt 22.txt 2.txt anaconda-ks.cfg

[root@axinlinux-01 ~]# [ -d axin ] || mkdir axin 使用||,前面的不存在,才建立

[root@axinlinux-01 ~]# ls

1.txt 22.txt 2.txt anaconda-ks.cfg axin

若是使用&&呢?

[root@axinlinux-01 ~]# [ -d axin ] && mkdir axin 使用&&,前面的雖然成功了,但執行後面已經存在的目錄就會報錯

mkdir: 沒法建立目錄"axin": 文件已存在

相關文章
相關標籤/搜索