3.9 8.10-8.13聽課筆記
特殊符號:
* 任意個字符
?任意一個字符
# 註釋字符(在配置文件的命令前加#則命令不生效;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聽課筆記