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

10月15日任務shell

8.10 shell特殊符號cut命令centos

8.11 sort_wc_uniq命令bash

8.12 tee_tr_split命令測試

8.13 shell特殊符號下this

 

截取命令:cut

  • -d 分隔符
  • -f 字段
#截取/etc/passwd的前十行的第1,2個字段
[root@centos7 ~]# cat /etc/passwd | head -n 5 | cut -d ":" -f 1,2
root:x
bin:x
daemon:x
adm:x
lp:x
  • -c 指定第幾個字符
[root@centos7 ~]# cat /etc/passwd | head -n 5 | cut -c 1
r
b
d
a
l

排序命令:sort

ASCII碼順序排序內容centos7

  • -n 按數字順序排序(默認字母排在數字前)
[root@centos7 ~]# cat /etc/passwd | head -n 5 | sort -n
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
  • -r 按反序
[root@centos7 ~]# cat /etc/passwd | head -n 5 | sort -r
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
  • -t 分隔符,配合-k n/ -k n1,n2
# 按第三個字段的字母順序排序
[root@centos7 ~]# cat /etc/passwd | head -n 5 | sort -t ":" -k 3
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

統計命令:wc

# 測試數據
[root@centos7 ~]# cat /etc/passwd | head -n 5
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
  • -l 顯示文本內容的行號
[root@centos7 ~]# cat /etc/passwd | head -n 5 | wc -l
5
  • -m/c 顯示字符數
[root@centos7 ~]# cat /etc/passwd | head -n 5 | wc -m / c
183
  • -w 顯示文本內的單詞數,以空格分割
[root@centos7 ~]# cat /etc/passwd | head -n 5 | wc -w
5

cat -A 顯示行尾的換行符spa

除重命令:uniq

去除文本內的重複行,前提須要先排序code

[root@centos7 ~]# cat 1.txt | uniq
num111
passwd this is a
num111
passwd
num111
|
# 不排序
[root@centos7 ~]# cat 1.txt | uniq -c
      1 num111
      1 passwd this is a
      1 num111
      1 passwd
      4 num111
      1 |
      
# 先排序再去重
[root@centos7 ~]# cat 1.txt | sort -n | uniq -c
      1 |
      6 num111
      1 passwd
      1 passwd this is a

重定向並顯示:tee

重定向內容至文本的同時在終端顯示排序

[root@centos7 ~]# cat /etc/passwd | head -n 5 | tee tee.txt
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

[root@centos7 ~]# cat tee.txt
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
  • -a 追加內容
[root@centos7 ~]# cat /etc/passwd | tail -n 1 | tee -a  tee.txt
castiel:x:1000:1000::/home/castiel:/bin/bash
[root@centos7 ~]# cat tee.txt
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
castiel:x:1000:1000::/home/castiel:/bin/bash

字符替換命令:tr

轉換內容,tr進程

[root@centos7 ~]# echo "test" | tr "s" "S"
teSt

文件切割命令:split

split切割文件

# 測試文件
[root@centos7 tmp]# find / -type f -name "*.conf" -exec cat {} >> test.txt \;

[root@centos7 tmp]# ll
總用量 676
-rw-r--r--. 1 root root 688355 9月  30 23:10 test.txt
[root@centos7 tmp]# du -sh test.txt 
676K	test.txt
  • -b 按指定大小切割,不加單位默認爲b(字節)
# 按大小進行切割
[root@centos7 tmp]# split -b 100K test.txt test-
[root@centos7 tmp]# ll
總用量 1352
-rw-r--r--. 1 root root 102400 9月  30 23:11 test-aa
-rw-r--r--. 1 root root 102400 9月  30 23:11 test-ab
-rw-r--r--. 1 root root 102400 9月  30 23:11 test-ac
-rw-r--r--. 1 root root 102400 9月  30 23:11 test-ad
-rw-r--r--. 1 root root 102400 9月  30 23:11 test-ae
-rw-r--r--. 1 root root 102400 9月  30 23:11 test-af
-rw-r--r--. 1 root root  73955 9月  30 23:11 test-ag
-rw-r--r--. 1 root root 688355 9月  30 23:10 test.txt

[root@centos7 tmp]# rm -f test-*
  • -l 按指定行數切割

切割時不指定文件前綴,將以特定命名

# 按行數進行分割
[root@centos7 tmp]# cat test.txt | wc -l
28439
[root@centos7 tmp]# split -l 7000 test.txt test-
[root@centos7 tmp]# ll
總用量 1356
-rw-r--r--. 1 root root 259864 9月  30 23:13 test-aa
-rw-r--r--. 1 root root 138784 9月  30 23:13 test-ab
-rw-r--r--. 1 root root 105356 9月  30 23:13 test-ac
-rw-r--r--. 1 root root 172792 9月  30 23:13 test-ad
-rw-r--r--. 1 root root  11559 9月  30 23:13 test-ae
-rw-r--r--. 1 root root 688355 9月  30 23:10 test.txt

shell特殊符號

  • $
    • 變量的值 echo $PATH
    • 正則表示行尾
    • !$表示上一條命令的最後一個參數
  • ;
    • 多條命令單行編輯連續執行
  • ~
    • 用戶家目錄
    • 正則表示匹配符
  • &
    • 後臺運行進程
  • 定向
    • > 重定向
    • >> 追加劇定向
    • 2> 錯誤重定向
    • 2>> 錯誤追加劇定向
    • &> 重定向與錯誤重定向
  • []
    • 範圍選其一,[0-9],[a-zA-Z]
  • ||
    • 命令1 || 命令2
      • 命令1正確執行,命令2不執行
      • 命令1執行錯誤,命令2執行
  • &&
    • 命令1 && 命令2
      • 命令1執行正確,命令2執行
      • 命令1執行錯誤,命令2不執行
[root@centos7 tmp]# ll
總用量 0
# 當前目錄下,test目錄不存在,返回錯誤代碼1
[root@centos7 tmp]# [ -d test ]
[root@centos7 tmp]# echo $?
1

# && :命令1返回錯誤,命令2--mkdir命令不執行
[root@centos7 tmp]# [ -d test ] && mkdir test
[root@centos7 tmp]# echo $?
1

# || :命令1返回錯誤,執行mkdir命令
[root@centos7 tmp]# [ -d test ] || mkdir test
[root@centos7 tmp]# echo $?
0

# 此時test目錄已存在,命令1返回0,命令2不執行
[root@centos7 tmp]# [ -d test ] ||  mkdir test
[root@centos7 tmp]# echo $?
0

[root@centos7 tmp]# ll
總用量 0
drwxr-xr-x. 2 root root 6 9月  30 23:31 test

# 命令1執行正確,命令2也執行
[root@centos7 tmp]# [ -d test ] && mkdir test
mkdir: 沒法建立目錄"test": 文件已存在
相關文章
相關標籤/搜索