8.10-shell特殊符(*、?、#、\、|)及cut命令

在學習 linux 過程中,也許已經接觸過某個特殊符號,例如: * ,它是一個通配符,代表零個或者多個字符或數字。下面我們就介紹下常用的特殊符號。

* 代表零個或者多個任意字符

[root@evan-01 ~]# ls
11.txt  3.txt                a.txt     test             test2.txt.bak   txtdir
1.txt   anaconda-ks.cfg      bb.txt    test2            test3_soft.txt
2.txt   anaconda-ks.cfg.bak  ojbk.txt  test2_heard.txt  test3.txt.bak
[root@evan-01 ~]# ls *.txt
11.txt  1.txt  2.txt  3.txt  a.txt  bb.txt  ojbk.txt  test2_heard.txt  test3_soft.txt
[root@evan-01 ~]# 

?代表一個任意的字符

[root@evan-01 ~]# ls
11.txt  3.txt                a.txt     test             test2.txt.bak   txtdir
1.txt   anaconda-ks.cfg      bb.txt    test2            test3_soft.txt
2.txt   anaconda-ks.cfg.bak  ojbk.txt  test2_heard.txt  test3.txt.bak
[root@evan-01 ~]# ls ?.txt
1.txt  2.txt  3.txt  a.txt
[root@evan-01 ~]#

# 註釋符號(註釋不會被展示出來)

[root@evan-01 ~]# name=evan #這個符號後面內容都是註釋,不被顯示
[root@evan-01 ~]# echo $name
evan
[root@evan-01 ~]#

\ 脫義字符

[root@evan-01 ~]# a=1
[root@evan-01 ~]# b=2
[root@evan-01 ~]# c=$a$b
[root@evan-01 ~]# echo $c
12
[root@evan-01 ~]#

我們實際想要的是吧 $a$b 輸出出來,而不是作爲變量 a b 輸出出來,怎麼辦呢
之前介紹過一種方法,放到 '' 號裏面,這樣就會認爲是字符串,直接輸出了

[root@evan-01 ~]# a=1
[root@evan-01 ~]# b=2
[root@evan-01 ~]# c='$a$b'
[root@evan-01 ~]# echo $c
$a$b
[root@evan-01 ~]#

在這再介紹一種方法,把 $ 代表變量的含義給去掉,也就是脫義

[root@evan-01 ~]# a=1
[root@evan-01 ~]# b=2
[root@evan-01 ~]# c=\$a\%b
[root@evan-01 ~]# echo $c
$a%b
[root@evan-01 ~]#

| 管道符
這個字符在前面多次出現過,它的作用是將前面命令的輸出作爲後面命令的輸入。這裏提到的後面的命令,並不是所有的命令都可以的,一般針對文檔操作的命令比較常用。例如:cat 、less、head、tail、grep、cut 、sort、wc、uniq、tee、tr、split、sed、awk等,其中 grep、sed 和 awk 是正則表達式所掌握的工具

[root@evan-01 ~]# ls
11.txt  3.txt                a.txt     test             test2.txt.bak   txtdir
1.txt   anaconda-ks.cfg      bb.txt    test2            test3_soft.txt
2.txt   anaconda-ks.cfg.bak  ojbk.txt  test2_heard.txt  test3.txt.bak
[root@evan-01 ~]# cat 3.txt | wc -l
4714
[root@evan-01 ~]#

cut 命令
cut 命令用來截取某一個字段

選項 含義
-d 後面跟分隔字符,分隔字符要用單引號括起來
-c 後面接的是第幾個字符(後面可以是數字 n,也可以是區間 n1-n2)
-f 後面接的是第幾個區塊(後面可以是數字 n,也可以是區間 n1-n2)

按區塊截取

[root@evan-01 ~]# cat /etc/passwd | head -2
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin 
[root@evan-01 ~]# cat /etc/passwd | head -2 | cut -d ':' -f 1
root
bin
[root@evan-01 ~]# cat /etc/passwd | head -2 | cut -d ':' -f 1,2
root:x
bin:x
[root@evan-01 ~]# cat /etc/passwd | head -2 | cut -d ':' -f 1-3
root:x:0
bin:x:1
[root@evan-01 ~]# 

按字符截取

[root@evan-01 ~]# cat /etc/passwd | head -2
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@evan-01 ~]# cat /etc/passwd | head -2 | cut -c1
r
b
[root@evan-01 ~]# cat /etc/passwd | head -2 | cut -c1,2
ro
bi
[root@evan-01 ~]# cat /etc/passwd | head -2 | cut -c1-10
root:x:0:0
bin:x:1:1:
[root@evan-01 ~]# 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章