【2018.04.24學習筆記】【linux基礎知識8.10-8.13】

8.10 shell特殊符號cut命令

shell中的特殊符號:正則表達式

一、* 表明任意n個字符,包括0個shell

二、? 表明任意單個字符bash

三、# 註釋字符,#號後面的字符不生效,僅註釋用ssh

[root@lgs-01 ~]# #ls
[root@lgs-01 ~]# ls
2  abc  anaconda-ks.cfg  passwdtest  rpmtest  tartest

四、\ 脫義字符,要顯示特殊符號自己,能夠用脫義字符,例如: $post

[root@lgs-01 ~]# y=$6
[root@lgs-01 ~]# echo $y

[root@lgs-01 ~]# y=\$6
[root@lgs-01 ~]# echo $y
$6

五、| 管道字符。code

與管道字符有關的cut命令:分割截取字符串排序

-d 選項:指定分隔符,一般配合其餘選項 如 -f 一塊兒用字符串

-f 選項:指定段號 顯示每行的全部指定段:it

[root@lgs-01 ~]# cat passwdtest|head -2
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@lgs-01 ~]# cat passwdtest|head -2|cut -f1 -d ":"
root
bin
[root@lgs-01 ~]# cat passwdtest|head -2|cut -f2,5 -d ":"
x:root
x:bin
[root@lgs-01 ~]# cat passwdtest|head -2|cut -f2-5 -d ":"
x:0:0:root
x:1:1:bin

-c選項:指定第幾個字符test

[root@lgs-01 ~]# cat passwdtest|head -2
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@lgs-01 ~]# cat passwdtest|head -2|cut -c 4
t
:

8.11 sort_wc_uniq命令

排序命令:sort ,按列排序,默認按字符的ACSII碼排序

[root@lgs-01 ~]# cat passwdtest
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
lgs:x:1008:1000::/home/lgs:/bin/bash
abc:x:1001:1000::/home/abc:/bin/bash

[root@lgs-01 ~]# sort passwdtest 
abc:x:1001:1000::/home/abc:/bin/bash
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
dbus:x:81:81:System message bus:/:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
lgs:x:1008:1000::/home/lgs:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin

-n選項:以數字的值排序,數字之外的認爲是0

[root@lgs-01 ~]# sort -n passwdtest 
abc:x:1001:1000::/home/abc:/bin/bash
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
dbus:x:81:81:System message bus:/:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
lgs:x:1008:1000::/home/lgs:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
1
2
9
12
51
59
587

-r選項:反向排序,從大到小

[root@lgs-01 ~]# sort -r passwdtest 
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
root:x:0:0:root:/root:/bin/bash
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
lgs:x:1008:1000::/home/lgs:/bin/bash
halt:x:7:0:halt:/sbin:/sbin/halt
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
abc:x:1001:1000::/home/abc:/bin/bash
9
59
587
51
2
12
1

-t選項:分隔符 -kn1 (少用)

統計行數:wc -l 空行也算

[root@lgs-01 ~]# cat 1.txt 
abc 111
1123
22 3

3

3
[root@lgs-01 ~]# wc -l 1.txt 
7 1.txt

統計字符數:wc -m ,每一行後面的隱藏換行符$也計算在內,空格也算

[root@lgs-01 ~]# cat -A 1.txt 
abc 111$
1123$
22 3$
$
3$
$
3$
[root@lgs-01 ~]# wc -m 1.txt 
24 1.txt

統計詞數:wc -w ,以空格區分統計

[root@lgs-01 ~]# cat 1.txt 
abc 111
1123
22 3

3

3
[root@lgs-01 ~]# wc -w 1.txt 
7 1.txt

去重複:uniq。 要連續行重複,纔會去重複。

只去重了重複的連續行aaaa

[root@lgs-01 ~]# cat 1.txt 
abc:111
1123
22 3

3

3
1123

aaaa
aaaa

bb
123
bb
[root@lgs-01 ~]# uniq 1.txt 
abc:111
1123
22 3

3

3
1123

aaaa

bb
123
bb

或者先排序後去重複纔有效,重複空行也能去重。

[root@lgs-01 ~]# cat 1.txt 
abc:111
1123
22 3

3

3
1123

aaaa
aaaa

bb
123
bb
[root@lgs-01 ~]# sort 1.txt |uniq

1123
123
22 3
3
aaaa
abc:111
bb

-c選項:統計重複的次數

[root@lgs-01 ~]# cat 1.txt 
abc:111
1123
22 3

3

3
1123

aaaa
aaaa

bb
123
bb
[root@lgs-01 ~]# sort 1.txt |uniq -c
      4 
      2 1123
      1 123
      1 22 3
      2 3
      2 aaaa
      1 abc:111
      2 bb

8.12 tee_tr_split命令

tee命令:重定向並顯示,手動輸入重定向內容

[root@lgs-01 ~]# cat 2.txt 
[root@lgs-01 ~]# tee 2.txt 
111
111
abc    
abc
^C
[root@lgs-01 ~]# cat 2.txt 
111
abc

tee -a 選項:追加並顯示,手動輸入追加內容

[root@lgs-01 ~]# cat 2.txt 
111
abc
[root@lgs-01 ~]# tee -a 2.txt 
lgs
lgs
xyz    
xyz
^C
[root@lgs-01 ~]# cat 2.txt 
111
abc
lgs
xyz

用管道符,能夠自動輸入tee的追加內容:

[root@lgs-01 ~]# cat 1.txt 
abc:111
1123
22 3

3

3
1123

aaaa
aaaa

bb
123
bb
[root@lgs-01 ~]# sort 1.txt |uniq -c|tee 3.txt 
      4 
      2 1123
      1 123
      1 22 3
      2 3
      2 aaaa
      1 abc:111
      2 bb
[root@lgs-01 ~]# cat 3.txt 
      4 
      2 1123
      1 123
      1 22 3
      2 3
      2 aaaa
      1 abc:111
      2 bb

tr命令:替換字符,[]內重複字符的,最後一位匹配的才生效替換。

[root@lgs-01 ~]# cat 2.txt 
111
abc
lgs
xyz
[root@lgs-01 ~]# cat 2.txt |tr '[111]' '[999]'
999
abc
lgs
xyz

[root@lgs-01 ~]# cat 2.txt
111
abc
lgs
xyz
126
[root@lgs-01 ~]# cat 2.txt |tr '[111]' '[456]'
666
abc
lgs
xyz
626

小寫字母替換爲大寫字母:

[root@lgs-01 ~]# cat 2.txt
111
abc
lgs
xyz
126
[root@lgs-01 ~]# cat 2.txt |tr '[a-z]' '[A-Z]'
111
ABC
LGS
XYZ
126

split命令:切割,大文件切成小文件 ,切成指定大小的幾份

[root@lgs-01 ~]# du -sh abc
3.0M	abc
[root@lgs-01 ~]# split -b 1M abc 
[root@lgs-01 ~]# ls
1.txt  2  2.txt  345  abc  anaconda-ks.cfg  passwdtest  rpmtest  tartest  xaa  xab  xac
[root@lgs-01 ~]# du -sh xaa
1.0M	xaa
[root@lgs-01 ~]# du -sh xab
1.0M	xab
[root@lgs-01 ~]# du -sh xac
956K	xac

-l 選項:指定行切割。

[root@lgs-01 6]# wc -l passwdtest 
31 passwdtest
[root@lgs-01 6]# split -l 10 passwdtest 
[root@lgs-01 6]# ls
passwdtest  xaa  xab  xac  xad
[root@lgs-01 6]# wc -l xaa
10 xaa
[root@lgs-01 6]# wc -l xad
1 xad
[root@lgs-01 6]# cat xaa
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@lgs-01 6]# cat xad
abc:y

指定分割後的文件名前綴:

[root@lgs-01 6]# split 
[root@lgs-01 6]# ls
abc  passwdtest
[root@lgs-01 6]# split -b 100K abc kkk.
[root@lgs-01 6]# ls
abc     kkk.ab  kkk.ad  kkk.af  kkk.ah  kkk.aj  kkk.al  kkk.an  kkk.ap  kkk.ar  kkk.at  kkk.av  kkk.ax  kkk.az  kkk.bb  kkk.bd  passwdtest
kkk.aa  kkk.ac  kkk.ae  kkk.ag  kkk.ai  kkk.ak  kkk.am  kkk.ao  kkk.aq  kkk.as  kkk.au  kkk.aw  kkk.ay  kkk.ba  kkk.bc  kkk.be

8.13 shell特殊符號下

$ : 變量的前綴,例如 $PATH、$HOME等;$在則正表達式裏表示行尾的意思

[root@lgs-01 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@lgs-01 ~]# echo $x
10

與! 結合使用:!$ 表明上一條命令的最後一個參數

[root@lgs-01 ~]# echo $x
10
[root@lgs-01 ~]# echo !$
echo $x
10

多條命令寫在一行,用 ; 號隔開

[root@lgs-01 ~]# ls ; ls -l abc
1.txt  2  2.txt  345  3.txt  6  abc  anaconda-ks.cfg  passwdtest  rpmtest  tartest  xaa  xab  xac
-rwxr-xr-x. 1 root root 3073568 4月  16 18:00 abc

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

[root@lgs-01 ~]# ls -d ~
/root

& 號放在命令後面,表明把命令放到後臺運行

[root@lgs-01 ~]# sleep 100 &
[1] 1586
[root@lgs-01 ~]# jobs
[1]+  運行中               sleep 100 &

[ ] 中括號 指定裏面字符中的某單個字符:[0-9]、[a-zA-Z]、[abcdefg]

|| 、&& 用於命令之間:在shell中 || 表明或者、&&表明而且

命令a || 命令b 表明 0 : 1或者 1 : 0,意思是命令a執行不成功,才執行命令b;若是命令a執行成功,就不執行命令b。

命令a && 命令b 表明 1 : 1 或者 0 : 0,意思是命令a執行成功,才執行命令b;若是命令a執行不成功,就不執行命令b。

shell腳本中的小案例:[-d abc] || mkdir abc,判斷abc是不是目錄,若是不是,建立abc目錄。

相關文章
相關標籤/搜索