2018.4.21 五周第四次課(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 1root
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:1cat 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截取等命令)