1. 程式人生 > >3.9 8.10-8.13聽課筆記

3.9 8.10-8.13聽課筆記

tee 特殊符號 sort uniq

Shell特殊符_cut命令

特殊符號:

* 任意個字符

?任意一個字符

# 註釋字符(在配置文件的命令前加#則命令不生效;shell腳本某一行加#則這一行不被執行,通常是註釋)

[root@localhost ~]# #ls -a

[root@localhost ~]#

\ 脫義字符

[root@localhost ~]# c='$a$b'

[root@localhost ~]# echo $c

$a$b

[root@localhost ~]# c=\$a\$b

[root@localhost ~]# echo $c

$a$b

| 管道符

管道相關的命令:

Cut 截取字段

[root@localhost ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1 以:為節點截取一塊字符

root

bin

[root@localhost ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1,2 以:為節點截取兩塊字符

root:x

bin:x

[root@localhost ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1-3

root:x:0

bin:x:1

[root@localhost ~]# cat /etc/passwd |head -2 |cut -c 4 截取一段的第4個字符

Sort

[root@localhost ~]# sort /etc/passwd

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

hyc:x:1000:1000::/home/hyc:/bin/bash

Sort默認按ASCII碼排序

[root@localhost ~]# cat /etc/passwd > 1.txt 文件中包含英文、數字、特殊符號等

[root@localhost ~]# sort 1.txt ASCII碼排序(特殊符號在最前(*除外),然後數字從小到大排序,再然後是字母等)

<>

><'

#$^&

213444

234532

234aaa

23aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

34aaaaaaaaaaaaaaaaaaaaaaaaaaaadd

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

*$fas

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin

[root@localhost ~]# sort -n 1.txt

<>

><'

#$^&

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

*$fas

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

hyc:x:1000:1000::/home/hyc:/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

23aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

34aaaaaaaaaaaaaaaaaaaaaaaaaaaadd

234aaa

213444

234532

*-n會按數字排序,其他字母、特殊符號會被當0處理

[root@localhost ~]# sort -nr 1.txt

234532

213444

234aaa

34aaaaaaaaaaaaaaaaaaaaaaaaaaaadd

23aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin

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

*反向排序,大的在前,小的在後

Sort -t 分隔符

[root@localhost ~]# cat -A 2.txt 顯示包括隱藏內容在內的所有內容

1234$

4567$

[root@localhost ~]# wc -l 2.txt 統計行數

2 2.txt

[root@localhost ~]# wc -m 2.txt 統計字符數

10 2.txt

[root@localhost ~]# wc -w 2.txt 統計詞數(每個詞用空格或空白符號隔開)

2 2.txt

[root@localhost ~]#

去重復字符

[root@localhost ~]# cat 2.txt

1234

1234

qwuh

chrf

ydry

ydry

[root@localhost ~]# uniq 2.txt

1234

qwuh

chrf

ydry

[root@localhost ~]# sort 2.txt |uniq 先排序,再去重復

1234

chrf

qwuh

rrrr

ydry

[root@localhost ~]# sort 2.txt 去重復

1234

1234

1234

chrf

qwuh

rrrr

ydry

ydry

*某兩行字符相同但被隔了幾行則這兩行不會被去重復,先排序再去重則不會出現重復

[root@localhost ~]# sort 2.txt

1234

1234

1234

chrf

qwuh

rrrr

ydry

ydry

[root@localhost ~]# sort 2.txt |uniq -c

3 1234

1 chrf

1 qwuh

1 rrrr

2 ydry

*先排序再統計重復次數

tee_tr_split

[root@localhost ~]# sort 2.txt|uniq -c > a.txt

[root@localhost ~]# cat a.txt

3 1234

1 chrf

1 qwuh

1 rrrr

2 ydry

[root@localhost ~]# sort 2.txt|uniq -c|tee a.txt

3 1234

1 chrf

1 qwuh

1 rrrr

2 ydry

tee>效果相同,但tee會把結果打印在屏幕上,>不會

[root@localhost ~]# sort 2.txt|uniq -c|tee -a a.txt –a參數表示追加(>>

3 1234

1 chrf

1 qwuh

1 rrrr

2 ydry

[root@localhost ~]# cat a.txt

3 1234

1 chrf

1 qwuh

1 rrrr

2 ydry

3 1234

1 chrf

1 qwuh

1 rrrr

2 ydry

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

[root@localhost ~]# echo "aminglinux"|tr '[a-z]' '[1]' a-z替換為1錯誤用法

1]]]]]]]]]

[root@localhost ~]# echo "aminglinux"|tr '[a-z]' '1' 正確用法

1111111111

Split命令

-b

[root@localhost a]# split -b 1000 a.txt 按每個文件1000字節切割文件(不帶單位默認字節)

[root@localhost a]# ls

a.txt xan xbb xbp xcd xcr xdf xdt xeh xev xfj xfx xgl xgz xhn xib

xaa xao xbc xbq xce xcs xdg xdu xei xew xfk xfy xgm xha xho xic

xab xap xbd xbr xcf xct xdh xdv xej xex xfl xfz xgn xhb xhp xid

[root@localhost a]# rm -f x* 刪除目錄下所有切割後的文件

[root@localhost a]# ls

a.txt

[root@localhost a]# split -b 100k a.txt 指定大小100k

[root@localhost a]# ls

a. txt xaa xab xac

b. [root@localhost a]# du -sh *

c. 212K a.txt

d. 100K xaa

e. 100K xab

f. 12K xac

[root@localhost a]# split -b 100k a.txt abc 指定切割後文件的前綴

[root@localhost a]# ls

abcaa abcab abcac a.txt xaa xab xac

-l

[root@localhost a]# wc -l a.txt 按行切割文件

5395 a.txt

[root@localhost a]# split -l 1000 a.txt

[root@localhost a]# wc -l *

5395 a.txt

1000 xaa

1000 xab

1000 xac

1000 xad

1000 xae

395 xaf

10790 總用量

Shell特殊符號

$ 變量前綴 !$ 一個組合,正則表達式中表示行尾

;當要將多條命令寫到一行時用於分割命令

[root@localhost a]# ls 1.txt;wc -l a.txt

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

5395 a.txt

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

& 把命令放到後面,會將命令放到後臺

&> 對正確和錯誤的內容使用相同的重定向

>,>>,2>,2>>

[] 指定字符中的一個([0-9][a-zA-Z]

||

[root@localhost a]# wc -l a.txt || ls 1.txt 第一條命令執行不成功則執行第二條,否則不再向下執行

5395 a.txt

[root@localhost a]# ls 1.txt || wc -l a.txt

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

5395 a.txt

[root@localhost a]# wc -l a.txt && ls -l a.txt 只有前面命令執行成功才會執行後續命令

5395 a.txt

-rw-r--r--. 1 root root 215603 3 11 23:37 a.txt

[root@localhost a]# wc -l 1.txt && ls -l a.txt

wc: 1.txt: 沒有那個文件或目錄

當用戶要創建一個目錄,若目錄不存在才創建,存在則不創建:

[root@localhost a]# [ -d aminglinux ] || mkdir aminglinux ||之前的命令用於判斷目錄是否存在,存在則不繼續後面的命令,否則執行後續的命令

[root@localhost a]# ls

aminglinux a.txt xaa xab xac xad xae xaf

[root@localhost a]# [ -d aminglinux ] && mkdir aminglinux 判斷目錄是否存在,然後強制創建目錄

mkdir: 無法創建目錄"aminglinux": 文件已存在 執行後面的命令後,報錯產生


3.9 8.10-8.13聽課筆記