1. 程式人生 > >2018.4.21 五周第四次課(shell特殊符號,cut截取等命令)

2018.4.21 五周第四次課(shell特殊符號,cut截取等命令)

cut截取 sort排序 wc統計 split切割 特殊符號

shell特殊符號_cut命令
概念:cut命令用來截取某一個字段
格式:cut -d ‘分割字符‘ [-cf] n,這裏的n是數字,該命令選項有如下幾個:
- d 後面跟分割字符,分割字符要用單引號括起來
- c 後面接的是第幾個字符
- f 後面接的是第幾個區塊

cut命令用法如下

[root@localhost do]# cat /etc/passwd |head -2
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@localhost do]# cat /etc/passwd |head -2 |cut -d ‘:‘ -f 1

root
bin
[root@localhost do]# cat /etc/passwd |head -2 |cut -d ‘:‘ -f 1,2
root:x
bin:x
[root@localhost do]# cat /etc/passwd |head -2 |cut -d ‘:‘ -f 1-3
root:x:0
bin:x:1

cat passwd這個文件,head只查看前兩行,cut -d截取分割符號為“:”, -f 1 表示截取第一段,1,2表示前兩段,1-3表示頭三段。


sort排序_wc統計行數_uniq刪除重復行

sort命令介紹

sort命令用於排序
格式:sort [-t 分隔符] [-kn1,n2] [-nru]
這裏-n1和n2指的是數字,其他選項如下:
-t 後面跟分割字符,作用跟cut -d選項一樣,截取符號是什麽;
-n 表示使用純數字排序,字母及特殊符號表示為0;
-r 表示反向排序;
-u 表示除去重復;
-kn1,n2 表示由n1區間排序到n2區間,可以只寫-kn1,即對n1字段排序。
  • 例:如sort不加任何選項,他是默認升序輸出,我們假設看passwd配置文件前五行有什麽區別。

    [root@localhost /]# head -n5 /etc/passwd |sort
    #查看passwd前五行,輸出給sort(排序)執行,按默認升序排序。
    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

例2:把passwd配置文件前10行寫到3.txt,再加幾個特殊符號數字進行排序。

技術分享圖片
如圖所示,我們用sort來進行排序,以數字排序 -n
[root@localhost do]# sort -n 3.txt #-n表示正序,特殊符號及字母表示為0
技術分享圖片
如第一張圖所示,我們-r 給反向排序看看
[root@localhost do]# sort -r 3.txt #-r表示反序
技術分享圖片

wc 命令介紹,用於來統計

概念:wc命令用於統計文檔的行數,字符數或詞數。
選項:
-l 統計行數
-m 統計字符數
-w 統計詞數,以空格作為區分
  • 具體操作如下:

    [root@localhost do]# wc /etc/passwd #查看這個文檔的行數,詞數及字數
    19 27 846 /etc/passwd
    [root@localhost do]# wc -l /etc/passwd #統計行數
    19 /etc/passwd
    [root@localhost do]# wc -m /etc/passwd #統計字數
    846 /etc/passwd
    [root@localhost do]# wc -w /etc/passwd #統計行數
    27 /etc/passwd

命令uniq 刪除重復的行

概念:uniq命令用來刪除重復的行,改名了只有-c選項比較常用;
它表示統計重復的行數,並把行數寫在前面。
  • 編寫一個文件,示例如下:

    [root@localhost do]# touch 4.txt #創建一個文本
    [root@localhost do]# vi 4.txt #編輯內容
    111
    222
    333
    111

  • 使用uniq前,必須獻給文件排序,否則不管用,示例如下:

    [root@localhost do]# cat 4.txt #查看裏面的內容
    111
    222
    333
    111
    [root@localhost do]# uniq 4.txt #測試一下看看不排序管用麽,不管用的
    111
    222
    333
    111
    [root@localhost do]# sort 4.txt |uniq #sort排序4.txt文件,再輸出給uniq刪除重復行
    111
    222
    333
    [root@localhost do]# sort 4.txt |uniq -c #統計重復的有行,有多少
    2 111
    1 222
    1 333

命令tee,重定向並顯示內容

tee命令後面跟文件名,起作用類似於重定向>,但它比重定向多一個功能;
把echo輸出的結果,通過管道符“|” tee輸出給後面的文件並在屏幕上顯示。
  • 具體操作如下:

    [root@localhost do]# touch 1.txt #創建一個文本
    [root@localhost do]# echo "1321asd123" | tee 1.txt #把echo的內容通過管道符號,輸出給 tee命令,到1.txt文件,並且在屏幕顯示結果。
    1321asd123

命令tr,用於替換字符

tr命令用於替換字符,常用來處理文檔中出現的特殊符號;
如DOS文檔中出現的符號^M,該命令常用的選項如下:
-d 表示刪除某個字符,後面跟要刪除的字符;
-s 表示刪除重復的字符。
  • 假設把一個文件的小l,改成大L

    [root@localhost do]# echo "linux" > 1.txt
    [root@localhost do]# cat 1.txt
    linux
    [root@localhost do]# echo "linux" | tr ‘[l]‘ ‘[L]‘ #把前面的小l,改成L
    Linux

命令split,切割文檔

split命令用於切割文檔,常用的選項為-b和-l
-b 表示依據大小來分割文檔,默認單位為byte(字節)
-l 表示依據行數來分割文檔
  • 先搜索出來個內容,並且所有的內容cat出來,追加重定向到一個文件去

    [root@localhost /]# find /etc/ -type f -name "*conf" -exec cat {} >> /tmp/do/1.txt \;
    #find 搜索 /etc/ 下的文件 名字問conf結尾的文件,cat {}查看出來的內容,追加到1.txt文件中。
    [root@localhost /]# du -sh /tmp/do/1.txt #查看這個文件的大小
    212K /tmp/do/1.txt

  • 示例1:這個文件有212K,我們給他切割指定大小為100K試試,示例如下:

    技術分享圖片
    #這裏,-b 指定帶下100K,不加單位默認是以字節顯示。

  • 示例2:指定目標文件名123開頭的文件。

    技術分享圖片
    #x開頭的文件,是示例1的結果,不需要看他,看123開頭的文件,形成一個對比。

shell特殊符號

重點章節,以後會經常用到```

#### 特殊符號 $
- 符號$可以用作變量前面的標識符,還可以和!結合起來使用,示例如下:
>[root@localhost do]# 
[root@localhost do]# ls /tmp/do/
123aa  1.txt  2.txt  3.txt  4.txt  a.txt  xaa  xab  xac
[root@localhost do]# !ls
ls /tmp/do/
123aa  1.txt  2.txt  3.txt  4.txt  a.txt  xaa  xab  xac
!$表示上條命令中的最後一個變量。

#### 特殊符號 ;
- 如果想在一行中運行兩個或兩個以上的命令,需要在命令之間加符號;示例如下:
>[root@localhost dior1]# mkdir 123 ; touch 1.txt ; touch 2.txt ; ls
123  1.txt  2.txt
如上含義,創建了個目錄,又創建了2個文件,並且最後ls查看執行

#### 特殊符號 ~
- 符號~ 表示用戶的家目錄,root用戶的家目錄是/root,普通用戶是/home/username

#### 特殊符號 &
- 如果想把一條命令放到後臺執行,則需要加上符號&,它通常用於命令運行時間較長的情況,可以用在sleep(休眠),示例如下:
>[root@localhost ~]# sleep 30 & 
[1] 40966
[root@localhost ~]# jobs 
[1]+  運行中               sleep 30 &

#### 重定向符號> 、>> 、2> 、 2>>  、 &> 的用法

概念:>、>>他們分別代表取代(>)和追加(>>)的意思;
當我們運行一個命令報錯時,報錯信息會輸出到當前屏幕;
如果想重定向到一個文本,則需要用重定向符號2>或2>>;
他們分別表示錯誤重定向和錯誤追加重定向。
&>表示錯誤和正確的重定向輸入到一個文件裏去


#### 中括號[] 
- 中括號內為字符組合,代表字符組合中的任意一個。(上一章節有提到)

#### 特殊符號 &&和||
- 使用||時,表示或者,意思是說 如果兩條命令用||分割的話,第一條執行成功後,第二條就不會執行,假如第一條命令是錯誤的話,執行失敗就會執行第二條。
> 示例1,假設兩個命令都是正確的
> [root@localhost do]# ls 1.txt || wc -l 2.txt 
1.txt

>示例2: 假設第一條命令是錯誤的,而第二條命令是正確的,就會執行第二條
[root@localhost do]# ls 111111.txt || wc -l 2.txt  #在這裏 根本就沒有一串1的txt文件
ls: 無法訪問111111.txt: 沒有那個文件或目錄
0 2.txt

- 使用&& 表示前面的命令執行成功以後,才會執行後面的命令,如果前面命令執行不成功,後面的命令就不會執行。用&&分割,用來判斷的。
>示例1,兩條命令都是正確的情況下 
>[root@localhost do]# ls 1.txt && wc -l 2.txt #ok,在這裏兩條命令都生效
1.txt
0 2.txt

>示例2,假如第一條命令不成功,後面的命令就不會執行。
>[root@localhost do]# ls 111.txt && wc -l 2.txt 
ls: 無法訪問111.txt: 沒有那個文件或目錄

# 普通特殊符號介紹
  • 任意個任意字符
    ? 任意一個字符
    #註釋字符
    \ 脫義字符
    | 管道符

2018.4.21 五周第四次課(shell特殊符號,cut截取等命令)