linux基礎(day25)

8.10 shell特殊符號cut命令

特殊符號

* 通配符,任意個任意字符
? 任意一個字符
# 註釋字符,在命令或腳本前面寫入加#號,就表示這一行不會生效
\ 脫義字符,
| 管道符

cut命令

  • cut命令,截取字符串,顯示行中的指定部分,刪除文件中指定字段
    • -d 分隔符
    • -f 指定段號,如果指定多段字符的時候,能夠用- 或, 表示
      • 好比 -f 1,2 或 -f 1-3
    • -c 指定第幾個字符
      • 在使用 -c 參數後,就不要使用 -d 和 -f 參數了
[root@hf-01 ~]# cat /etc/passwd |head -2        //查看文件的前兩行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@hf-01 ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1        //截取文件前兩行中以冒號做爲分割符的第一段
root
bin
[root@hf-01 ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1,2
root:x
bin:x
[root@hf-01 ~]# cat /etc/passwd |head -2 |cut -d ":" -f 1-3
root:x:0
bin:x:1
[root@hf-01 ~]# cat /etc/passwd |head -2 |cut -c 4        //截取兩段文件前兩行中顯示第4個字符
t
:

8.11 sort_wc_uniq命令

sort命令

  • sort 命令,排序。將文件進行排序,並將排序結果標準輸出
    • sort命令,默認按照ASCII碼排序
    • -n 以數字排序,而其中的字符和字母都會默認爲0
    • -r 反序
    • -t 分隔符
    • -kn1/-kn1,n2
[root@hf-01 ~]# sort /etc/passwd        //sort命令,默認按照ASCII碼排序
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
[root@hf-01 ~]# head /etc/passwd >> 1.txt        //head命令,默認顯示前十行
[root@hf-01 ~]# vim 1.txt        //並在文件中添加一些字符,特殊符號
[root@hf-01 ~]# sort 1.txt        //sort命令,默認按照ASCII碼排序
<
{
1.txt
222111
22222222222aaaaaa
223333
22aaa
2.txt
47888888gdkgljsd
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
*dffadg
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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sync:x:5:0:sync:/sbin:/bin/sync
[root@hf-01 ~]#

sort命令的參數 -n

  • sort -n 1.txt中的字母和字符都默認爲0
    • 因此字母和符號會排在最前面,而後是數字排序
[root@hf-01 ~]# sort -n 1.txt
<
{
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
*dffadg
halt:x:7:0:halt:/sbin:/sbin/halt
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
1.txt
2.txt
22aaa
222111
223333
47888888gdkgljsd
22222222222aaaaaa
[root@hf-01 ~]#

sort命令的參數-r

  • sort -nr 1.txt //反序排序
    • -r表示反序
[root@hf-01 ~]# sort -nr 1.txt
22222222222aaaaaa
47888888gdkgljsd
223333
222111
22aaa
2.txt
1.txt
sync:x:5:0:sync:/sbin:/bin/sync
operator:x:11:0:operator:/root:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
*dffadg
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
{
<
[root@hf-01 ~]#

sort命令的參數 -t

  • sort -t 分隔符

wc命令

  • wc -l 統計行數
    • -m 統計字符數 ,也會統計換行符(換行符是隱藏的)
    • -w 統計詞,它是以空格、空白字符進行區分的
      • 以分號分割的也會認爲是一個字符,好比111,qqq這個就會認爲是一個字符
  • cat -A 顯示文件中全部的字符(包括隱藏的)
[root@hf-01 ~]# wc -l 1.txt    //顯示文件的行數
22 1.txt
[root@hf-01 ~]# wc -m 1.txt        //顯示文件中的字符數
468 1.txt
[root@hf-01 ~]# vim 2.txt        //在文件中編寫兩行,6個字符
[root@hf-01 ~]# wc -m 2.txt    //在查看的時候,會顯示出8個字符
8 2.txt
[root@hf-01 ~]# cat -A 2.txt        //會統計全部的字符,包括隱藏字符
123$
avd$
[root@hf-01 ~]# wc -w 2.txt        //它是以空格、空白字符進行區分的
2 2.txt

uniq命令

  • uniq 去重, 用於報告或忽略文件中的重複行。常與sort排序命令結合使用
    • -c統計行數

uniq命令去重條件:須要先排序,再去重正則表達式

[root@hf-01 ~]# vim 2.txt
[root@hf-01 ~]# cat 2.txt
123
avd 112,21a
123
avd
1
2
1
[root@hf-01 ~]# uniq 2.txt
123
avd 112,21a
123
avd
1
2
1
[root@hf-01 ~]# vim 2.txt
[root@hf-01 ~]# cat 2.txt        //查看文件內容
123
avd 112,21a
123
avd
1
1
2
[root@hf-01 ~]# uniq 2.txt        //會看到在更改排序後,去重了
123
avd 112,21a
123
avd
1
2
[root@hf-01 ~]#
  • uniq命令和sort命令結合使用
    • 先排序,再去重
[root@hf-01 ~]# sort 2.txt
1
1
123
123
2
avd
avd 112,21a
[root@hf-01 ~]# sort 2.txt |uniq
1
123
2
avd
avd 112,21a
[root@hf-01 ~]#

uniq命令參數 -c

  • uniq -c 統計重複次數
[root@hf-01 ~]# sort 2.txt |uniq -c
      2 1
      2 123
      1 2
      1 avd
      1 avd 112,21a
[root@hf-01 ~]#

8.12 tee_tr_split命令

tee命令

  • 清空文件內容 >1.txt
[root@hf-01 ~]# > 2.txt
[root@hf-01 ~]# cat 2.txt
[root@hf-01 ~]#
  • tee命令和輸出重定向>相似,重定向的同時還在屏幕顯示
    • tee命令,就是重定向,把前面命令輸出的結果打印到屏幕上
    • -a參數,追加劇定向
[root@hf-01 ~]# cat 3.txt
asda
123 fgdg,45
1
abc
cda
abc
1
[root@hf-01 ~]# sort 3.txt |uniq -c |tee a.txt
      2 1
      1 123 fgdg,45
      2 abc
      1 asda
      1 cda
[root@hf-01 ~]# cat a.txt
      2 1
      1 123 fgdg,45
      2 abc
      1 asda
      1 cda
[root@hf-01 ~]#

tee命令參數-a

  • tee -a 就是追加劇定向
[root@hf-01 ~]# sort 3.txt |uniq -c |tee -a a.txt
      2 1
      1 123 fgdg,45
      2 abc
      1 asda
      1 cda
[root@hf-01 ~]# cat a.txt
      2 1
      1 123 fgdg,45
      2 abc
      1 asda
      1 cda
      2 1
      1 123 fgdg,45
      2 abc
      1 asda
      1 cda
[root@hf-01 ~]#

tr命令

  • tr 命令,用來替換字符的命令,tr 'a' 'b',大小寫替換tr '[a-z]' '[A-Z]'
    • 支持寫多個字符替換
[root@hf-01 ~]# echo "hanfeng" |tr '[hf]' '[HF]'
HanFeng
[root@hf-01 ~]# echo "hanfeng" |tr 'h' 'H'
Hanfeng
[root@hf-01 ~]# echo "hanfeng" |tr '[a-z]' '[A-Z]'
HANFENG
[root@hf-01 ~]#
  • 字符替換數字的時候,須要注意格式
    • 替換數字的時候,須要去除方括號[]
[root@hf-01 ~]# echo "hanfeng" |tr '[a-z]' '[1]'    //錯誤示範,這樣寫會出錯
]1]]]]]
[root@hf-01 ~]# echo "hanfeng" |tr '[a-z]' '1'        //在替換成數字的時候,須要去除方括號
1111111
[root@hf-01 ~]#

split命令

  • split 切割,將一個大文件切割成不少個小文件
    • -b大小(默認單位字節)
      • 格式:split -b 100M bigfile
        • 若不寫單位,會默認是字節
    • -l行數
      • 格式:split -l 1000 bigfile
[root@hf-01 ~]# find /etc/ -type f -name "*conf" -exec cat {} >>a.txt \;    //將etc目錄下全部文件以conf結尾的文件全都輸出重定向到a.txt文件中
[root@hf-01 ~]# du -sh a.txt
252K	a.txt
[root@hf-01 ~]# mv a.txt 111/    //把a.txt文件移動到111目錄下
[root@hf-01 ~]# cd 111/            //切換到111目錄下
[root@hf-01 111]# ls
a.txt
[root@hf-01 111]# split -b 1000 a.txt    //單位是字節(1000byte=1k)
[root@hf-01 111]# ls
a.txt  xbe  xcj  xdo  xet  xfy  xhd  xii  xjn  xks  xlx  xnc  xoh  xpm  xqr  xrw  xtb
xaa    xbf  xck  xdp  xeu  xfz  xhe  xij  xjo  xkt  xly  xnd  xoi  xpn  xqs  xrx  xtc
xab    xbg  xcl  xdq  xev  xga  xhf  xik  xjp  xku  xlz  xne  xoj  xpo  xqt  xry  xtd
xac    xbh  xcm  xdr  xew  xgb  xhg  xil  xjq  xkv  xma  xnf  xok  xpp  xqu  xrz  xte
等等等,只截取了一小部分
[root@hf-01 111]# du -sh        //查看目錄下文件大小
2.3M	.
[root@hf-01 111]# du -sh *        //會看到分割出來的都佔據了一個塊
252K	a.txt
4.0K	xaa
4.0K	xab
4.0K	xac
4.0K	xad
等等等,只截取了一小部分
[root@hf-01 111]# rm -f x*

在切割一個文件,在不指定任何的文件名,最後顯示的切割完的文件,會是已xab,xac這樣一直延續下去,若再切割一次,則會zxaaa,zxaab等依次下去shell

  • split -b指定單位大小切割
[root@hf-01 111]# 
[root@hf-01 111]# split -b 100k a.txt
[root@hf-01 111]# ls
a.txt  xaa  xab  xac
[root@hf-01 111]# du -sh *
252K	a.txt
100K	xaa
100K	xab
52K	xac
[root@hf-01 111]# rm -f x*
[root@hf-01 111]#
  • 指定文件大小的同時,指定文件的名稱
[root@hf-01 111]# split -b 100k a.txt abc
[root@hf-01 111]# ls
abcaa  abcab  abcac  a.txt
[root@hf-01 111]# split -b 100k a.txt abc.
[root@hf-01 111]# ls
abcaa  abc.aa  abcab  abc.ab  abcac  abc.ac  a.txt
[root@hf-01 111]# rm -f abc*

切割的文件默認是以x開頭!!!vim

split命令的參數-l

  • split -l 指定行數
[root@hf-01 111]# split -l 1000 a.txt
[root@hf-01 111]# ls -l
總用量 512
-rw-r--r--. 1 root root 256144 11月 18 06:41 a.txt
-rw-r--r--. 1 root root  44741 11月 18 06:59 xaa
-rw-r--r--. 1 root root  44239 11月 18 06:59 xab
-rw-r--r--. 1 root root  44320 11月 18 06:59 xac
-rw-r--r--. 1 root root  34153 11月 18 06:59 xad
-rw-r--r--. 1 root root  38618 11月 18 06:59 xae
-rw-r--r--. 1 root root  34693 11月 18 06:59 xaf
-rw-r--r--. 1 root root  15380 11月 18 06:59 xag
[root@hf-01 111]# wc -l *
  6548 a.txt
  1000 xaa
  1000 xab
  1000 xac
  1000 xad
  1000 xae
  1000 xaf
   548 xag
 13096 總用量
[root@hf-01 111]#

8.13 shell特殊符號下

特殊符號

$ 變量前綴,!$組合,正則裏面表示行尾
;多條命令寫到一行,用分號分割 
~ 用戶家目錄,後面正則表達式表示匹配符
& 放到命令後面,會把命令丟到後臺
>    正確重定向
>>     追加劇定向
2>    錯誤重定向
2>>    錯誤追加劇定向
&>    正確和錯誤輸出重定向
[ ] 指定字符中的一個,[0-9],[a-zA-Z],[abc]
|| 和 && ,用於命令之間
  • || 表示 或者 的意思
    • 兩條命令之間,第一條命令若是執行不成功,那就會執行第二條
      • 若第一條命令執行成功,那麼就不會再執行第二條命令
  • && 表示 和 的意思
    • 兩條命令之間,第一條命令執行成功後,纔會執行第二條命令

判斷一個目錄是否存在

  • [ -d haha ]判斷這個是不是一個目錄,是否存在的
    • 若是是目錄,而且存在,那 [ -d haha ] 執行成功
[root@hf-01 ~]# [ -d haha ] || mkdir haha
[root@hf-01 ~]# ls
111  1_heard.txt  1.txt  2.txt      3.txt      haha
[root@hf-01 ~]# [ -d haha ] && mkdir haha      
mkdir: 沒法建立目錄"haha": 文件已存在
[root@hf-01 ~]#

相關測驗題目

擴展

  1. source exec 區別bash

  2. Linux特殊符號大全ui

  3. sort並未按ASCII排序.net

相關文章
相關標籤/搜索