shell特殊符號cut命令、sort_wc_uniq命令、tee_tr_split命令、shell特殊符號下

shell特殊符號cut命令

  • cut 分割,-d 分隔符 -f 指定段號 -c 指定第幾個字符
  • sort 排序, -n 以數字排序 -r 反序 -t 分隔符 -kn1/-kn1,n2
  • wc -l 統計行數 -m 統計字符數 -w 統計詞
  • uniq 去重, -c統計行數
  • tee 和>相似,重定向的同時還在屏幕顯示
  • tr 替換字符,tr 'a' 'b',大小寫替換tr '[a-z]' '[A-Z]'
  • split 切割,-b大小(默認單位字節),-l行數

cut命令

  • cut命令用來截取某個字符串
  • 格式:cut –d 「分割符」 文件名
  • -d:後面跟分割字符,分割字符用雙引號括起來;
  • -f:後面跟接第幾段字符串
  • -c:後面接第幾個字符

  1. 截取第1到第3段
[root@linux-128 ~]# head -5 1.txt |cut -d ":" -f 1-3
root:x:0
bin:x:1
daemon:x:2
adm:x:3
lp:x:4
  1. 截取第1段和第3段
[root@linux-128 ~]# head -5 1.txt |cut -d ":" -f 1,3
root:0
bin:1
daemon:2
adm:3
lp:4
  1. 截取第2個字符
[root@linux-128 ~]# head -5 1.txt |cut -c 2
o
i
a
d
p
  1. 截取第2個字符到第5個字符
[root@linux-128 ~]# head -5 1.txt |cut -c 2-5
oot:
in:x
aemo
dm:x
p:x:

sort命令

  • sort命令用作排序,格式sort [-t 分割符] [-kn1,n2] [-nur],n1,n2指的是數字
  • -t 分割符
  • -k 按第幾列排序;區間範圍用逗號-k3,5
  • -n 按數字排序
  • -r 反序排序,按從打到小排序
  • -u 去重複
  • -un 字母開頭的會識別成重複內容,如skj1 a weotj 都會認爲是重複內容,只顯示數字內容

  1. sort 不加任何選項,從首行字符向後,依次按ASCII碼值進行比較,按升序排序
[root@linux-128 ~]# vim 2.txt
111
111
111
111aaa
121
!@#$@123
1asd
abab
abab
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
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
  1. 以數字排序
[root@linux-128 ~]# sort -n 2.txt
!@#$@123
abab
abab
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
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
1asd
111
111
111
111aaa
121
  • 注意:若是有字母或者特殊符號,在數字排序中,都默認當作0.
  1. 反向排序
[root@linux-128 ~]# sort -nr 2.txt
121
111aaa
111
111
111
1asd
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
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
abab
abab
!@#$@123
  1. 去重複,這裏把字母都當作了0,而後去重複。
[root@linux-128 ~]# sort -nu 2.txt
abab
1asd
111
121

wc命令

  • wc命令用於統計文檔的行數,字符數,單詞數。
  • -l 統計行數
  • -m統計字符數
  • -w統計單詞數

  1. 查看文件3.txt 行數
[root@linux-128 ~]# cat 3.txt
abab
1asd
111
121
[root@linux-128 ~]# wc -l 3.txt
4   3.txt
  1. 查看文件3.txt字符有多少個,$爲行尾字符
[root@linux-128 ~]# cat -A 3.txt
abab$
1asd$
111$
121$
[root@linux-128 ~]# wc -m 3.txt
18 3.txt
  1. -w統計單詞,它是以空格或者空白字符來分割。
[root@linux-128 ~]# cat 3.txt
abab
1asd
111
121
[root@linux-128 ~]# wc -w 3.txt
4 3.txt
  1. 若是wc後面不加任何選項,直接跟文檔,則會把行數,單詞數,字符數依次輸出。
[root@linux-128 ~]# wc 3.txt
 4  4 18 3.txt

uniq命令

  • uniq命令用來刪除重複的行,一般和sort連在一塊兒使用
  • -c選項比較經常使用,它表示統計重複的行數,並把行數寫在前面

[root@linux-128 ~]# sort 2.txt
111
111
111
111aaa
121
!@#$@123
1asd
abab
abab
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
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
  1. 先排序而後刪除重複行
[root@linux-128 ~]# sort 2.txt |uniq -c
      3 111
      1 111aaa
      1 121
      1 !@#$@123
      1 1asd
      2 abab
      1 adm:x:3:4:adm:/var/adm:/sbin/nologin
      1 bin:x:1:1:bin:/bin:/sbin/nologin
      1 daemon:x:2:2:daemon:/sbin:/sbin/nologin
      1 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
      1 root:x:0:0:root:/root:/bin/bash

[root@linux-128 ~]# sort 2.txt |uniq
111
111aaa
121
!@#$@123
1asd
abab
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
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
root:x:0:0:root:/root:/bin/bash

tee命令

  • tee命令後面文件名,其做用相似於重定向>;可是它比重定向多一個顯示在屏幕上的功能;
[root@linux-128 ~]# cat 3.txt >4.txt
[root@linux-128 ~]# cat 3.txt |tee 4.txt
abab
1asd
111
121
  1. tee –a 至關於追加劇定向>>;它多了一個顯示在屏幕上的功能
[root@linux-128 ~]# cat 3.txt |tee -a 4.txt
abab
1asd
111
121
[root@linux-128 ~]# cat 3.txt |tee -a 4.txt
abab
1asd
111
121
[root@linux-128 ~]# cat 4.txt
abab
1asd
111
121
abab
1asd
111
121
abab
1asd
111
121

命令tr

  • tr命令用於替換字符
[root@linux-128 ~]# cat 3.txt |tr 'a' 'A'
AbAb
1Asd
111
121

[root@linux-128 ~]# cat 3.txt |tr '[a-z]' '[A-Z]'
ABAB
1ASD
111
121

split命令

  • split 用於分割文檔
  • split -l 按行來分割
  • split -b 按大小來分割
  1. split -b
[root@linux-128 ~]# mkdir test
[root@linux-128 ~]# cd test
[root@linux-128 test]# find /etc/ -type f -name "*.conf" -exec cat {} >1.txt \;
[root@linux-128 test]# du -sh 1.txt
252K	1.txt
[root@linux-128 test]# split -b 50k 1.txt
[root@linux-128 test]# ls
1.txt  xaa  xab  xac  xad  xae  xaf
  1. split –l
[root@linux-128 test]# wc -l 1.txt
6479 1.txt
[root@linux-128 test]# split -l 1000 1.txt
[root@linux-128 test]# ls
1.txt  xaa  xab  xac  xad  xae  xaf  xag
  • split 後面若是不指定文件名,則會以xaa,xab。。。這樣的文件名來存取切割後的文件
  1. 指定目標分割文件名 爲abc.
[root@linux-128 test]# split -l 1000 1.txt abc.
[root@linux-128 test]# ls
1.txt  abc.aa  abc.ab  abc.ac  abc.ad  abc.ae  abc.af  abc.ag

特殊符號

  • $ 變量前綴,!$組合,正則裏面表示行尾
  • ;多條命令寫到一行,用分號分割
  • ~ 用戶家目錄,後面正則表達式表示匹配符
  • & 放到命令後面,會把命令丟到後臺
  • 重定向 > 追加劇定向>> 錯誤重定向2> 錯誤追加劇定向2>> 正確和錯誤重定向&>
  • [ ] 指定字符中的一個,[0-9],[a-zA-Z],[abc]
  • || 和 && ,用於命令之間

  • $:能夠做爲變量前面的標示符,能夠和!結合起來使用,在正則裏面表示行尾
[root@linux-128 test]# ls /root
11.txt      123     1.txt   2.txt        3.txt   anaconda-ks.cfg  d6z
11.txt.bak  1a.txt  +2      321.txt      4.txt   a.txt            test
12          1.log   23.txt  321.txt.bak  ab.txt  b.txt            工號.txt
[root@linux-128 test]# ls !$
ls /root
11.txt      123     1.txt   2.txt        3.txt   anaconda-ks.cfg  d6z
11.txt.bak  1a.txt  +2      321.txt      4.txt   a.txt            test
12          1.log   23.txt  321.txt.bak  ab.txt  b.txt            工號.txt
  • ; 多條命令寫在一行,用;分割
[root@linux-128 ~]# cat 2.txt;cat 3.txt
111
111aaa
121
111
abab
1asd
abab
!@#$@123
111
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
abab
1asd
111
121
  • ~ 家目錄,後面正則表示匹配符linux

  • 重定向(正確) > ,會覆蓋之前的內容正則表達式

[root@linux-128 ~]# echo "121212">3.txt
[root@linux-128 ~]# cat 3.txt
121212
  • 追加劇定向(正確)>>
[root@linux-128 ~]# echo "ababab">>3.txt
[root@linux-128 ~]# cat 3.txt
121212
Ababab
  • 錯誤重定向 2>
[root@linux-128 ~]# cat 5.txt 2>6.txt
[root@linux-128 ~]# cat 6.txt
cat: 5.txt: 沒有那個文件或目錄
  • 錯誤追加劇定向 2>>
[root@linux-128 ~]# cat 6.txt
cat: 5.txt: 沒有那個文件或目錄
cat: 5.txt: 沒有那個文件或目錄
  • &> 錯誤和正確都重定向到某個文件裏面。
[root@linux-128 ~]# cat 3.txt 5.txt &> 6.txt
[root@linux-128 ~]# cat 6.txt
121212
ababab
cat: 5.txt: 沒有那個文件或目錄
  • shell中的連接符號 && || ;
  • && 前面命令執行成功後,纔會執行後面的命令;若是前面執行不成功,後面命令不執行
  • || 前面的命令執行不成功,纔會執行後面的命令;若是前面命令執行成功,後面命令不執行
  • ; 左邊的命令成功與否,後邊的命令都會執行
相關文章
相關標籤/搜索