1. 程式人生 > >shell中的特殊符號和cut,sort,wc,uniq,tee,tr,split命令

shell中的特殊符號和cut,sort,wc,uniq,tee,tr,split命令

com 字符串 學習 linu sci 在屏幕上 ges 特殊 shadow

一、shell中的特殊符號

你在學習linux的過程中,也許你已經接觸過某個特殊符號,例如”*”,它是一個通配符號,代表零個或多個字符或數字。
常用到的特殊字符:
1、* 代表零個或多個任意字符。
技術分享圖片
2、? 只代表一個任意的字符,不管是數字還是字母,只要是一個都能匹配出來。
技術分享圖片
3、#這個符號在linux中表示註釋說明的意思,即#後面的內容linux忽略掉。
技術分享圖片
4、\ 脫意字符,將後面的特殊符號(例如”*” )還原為普通字符。
技術分享圖片
5、| 管道符,前面多次出現過,它的作用在於將符號前面命令的結果丟給符號後面的命令。這裏提到的後面的命令,並不是所有的命令都可以的,一般針對文檔操作的命令比較常用,例如cat, less, head, tail, grep, cut, sort, wc, uniq, tee, tr, split, sed, awk等等,其中grep, sed, awk為正則表達式必須掌握的工具。

技術分享圖片
wc -l命令用來計算一個文檔有多少行。


cut命令
用來截取某一個字段。
語法:

cut -d ‘分隔字符‘ [-cf]      //n這裏的n是數字

-d :後面跟分隔字符,分隔字符要用單引號括起來
-c :後面接的是第幾個字符
-f :後面接的是第幾個區塊

技術分享圖片
技術分享圖片


sort命令
sort命令是在Linux裏非常有用,它將文件進行排序,並將排序結果標準輸出。sort命令既可以從特定的文件,也可以從stdin中獲取輸入。
語法:

sort [-t 分隔符] [-kn1,n2] [-nru]   //這裏的n1 < n2

-t 分隔符 :作用跟cut的-d一個意思
-n :使用純數字排序
-r :反向排序

-u :去重復
-kn1,n2 :由n1區間排序到n2區間,可以只寫-kn1,即對n1字段排序

實例:
1、如果sort不加任何選項,則從首字符向後,依次按ASCII碼值進行比較,最後將他們按升序輸出。
技術分享圖片
2、-t 後面跟分隔符,-k後面跟數字,表示對第幾個區域的字符串排序,-n 則表示使用純數字排序(看第3列的排序)
技術分享圖片
3、-k3,5 表示從第3到第5區域間的字符串排序,-r表示反向排序
技術分享圖片


命令 : wc

用於統計文檔的行數、字符數、詞數,常用的選項為:

-l :統計行數
-m :統計字符數
-w :統計詞數

技術分享圖片
wc 不跟任何選項,直接跟文檔,則會把行數、詞數、字符數依次輸出。


uniq命令
uniq用來刪除重復的行,該命令-c選項比較常用,-c 表示統計重復的行數,並把行數寫在前面。

使用uniq 的前提是需要先給文件排序,否則不管用。

[root@localhost ~]# uniq testb.txt
111
222
111
333
[root@localhost ~]# sort testb.txt |uniq
111
222
333
[root@localhost ~]# sort testb.txt |uniq -c
      2 111
      1 222
      1 333

命令tee
tee後面跟文件名,其作用類似於重定向>,比重定向多一個功能,把文件寫入後面所跟的文件時並顯示在屏幕上,通常用於管道符 |後。

#echo “aaaaaaaaaaaaaaa” |tee testb.txt
aaaaaaaaaaaaaaa
#cat testb.txt
aaaaaaaaaaaaaaa

命令tr
tr用於替換字符,常用來處理文檔中出現的特殊符號,如DOS文檔中出現的符號 ^M 。
選項:

-d 表示刪除某個字符,後面跟要刪除的字符。
-s 表示刪除重復的字符。

把小寫字母變成大寫字母,如tr’[a-z]’’[A-Z]’:

#head –n2 /etc/passwd |tr’[a-z]’’[A-Z]’
ROOT:X:O:O:ROOT:/ROOT:/BIN/BASH
BIN:X:11:BIN:/BIN:/SBIN/NOLOGIN

還可以替換一個字符:

#grep  ‘root’ /etc/passwd |tr ‘r’ ‘R’      
Root:x:o:o:Root:/Root:/bin/bash
opeRatoR:x:11:0:opeRatoR:/Root:/sbin/nologin

命令split
split用於切割文檔,常用的選項為-b和-l。
選項:

-b 表示依據大小來分割文檔,單位為byte
-l 表示依據行數來分割文檔

split -b
#mkdir split_dir
#cd !$
cd split_dir
#cp /etc/passwd ./
#split –b 500 passwd
#ls
passwd xaa xab xac xad xae

如果split不指定目標文件名,則會以xaa、xab……這樣的文件名來存取切割後的文件。指定目標文件名,示例如下:

# rm –f xa*
# split –b 500 passwd 123
# ls
# 123aa 123ab 123ac 123ad 123ae passwd

-l :依據行數來分割文檔

# split -l  
# rm -f 123a*
# split -l 10 passwd
# wc -l *
 45 passwd
 10 xaa
 10 xab
 10 xac
 10 xad
 5 xae
 90 總用量

二、shell一些其他特殊符號

1、特殊符號$
$可以用作變量前面的標識符,還可以和!結合使用。

#cd ..
#ls testb.txt
testb.txt
#ls !$            
ls testb.txt
testb.txt

!$表示上條命令的最後一個變量,本例中上條命令最後是testb.txt,那麽在當前命令下輸入!$則表示testb.txt。

2、特殊符號;
在一行命令中運行兩個或兩個以上的命令,需要在命令之間加符號;。

#mkdir testb.txt ; touch test1.txt ; touch test2.txt ; ls –d test* 創建目錄、創建文件、列出目錄

3、特殊符號~
符號~代表用戶的家目錄,root用戶的家目錄是/root,普通用戶的家目錄是/home/username。

#cd ~
#pwd
/root
#su ccj
#cd ~
#pwd
/home/ccj

4、特殊符號&
把一條命令放到後臺執行,則需要加上符號&,它通常用於命令運行時間較長的情況。比如,可以用在sleep後,如下所示:

#sleep 30 &
[1]3008
#jobs
[1]+ 運行中       sleep 30 &

5、重定向符號>、>>、2>和2>>

和>>分別表示取代和追加的意思。當我們運行一個命令報錯時,報錯信息會輸出到當前屏幕。如果想重定向到一個文本,則要用重定向符號2>或者2>>,它們分別表示錯誤重定向和錯誤追加重定向。

#ls aaaa
ls:無法訪問aaaa:沒有那個文件或目錄
#ls aaaa 2> /tmp/error
#cat /tmp/error
ls:無法訪問aaaa:沒有那個文件或目錄
#ls aaaa 2>> /tmp/error
#cat /tmp/error
ls:無法訪問aaaa:沒有那個文件或目錄
ls:無法訪問aaaa:沒有那個文件或目錄

6、中括號[ ]
中括號內為字符組合,代表字符組合中的任意一個,還可以表示一個範圍(1-3,a-z)。

#cd /tmp/10
#ls –d test*
test1.txt  test2.txt  testb.txt  testdir
#ls –d test[1-3].txt
test1.txt  test2.txt
#ls –d test[12b].txt
test1.txt  test2.txt  testb.txt
#ls –d test[1-9].txt
test1.txt  test2.txt  
#ls –d test[1-9a-z].txt
test1.txt  test2.txt  testb.txt

7、特殊符號&& ||
在上面剛剛提到了分號,用於多條命令間的分隔符。另外還有兩個可以用於多條命令中間的特殊符號,那就是 “&&” 和 “||” 下面把這幾種情況全列出:

command1 ; command2
command1 && command2
command1 || command2

使用 ”;” 時,不管command1是否執行成功都會執行command2;
使用 “&&” 時,只有command1執行成功後,command2才會執行,否則command2不執行;
使用 “||” 時,command1執行成功後command2 不執行,否則去執行command2,總之command1和command2總有一條命令會執行。

shell中的特殊符號和cut,sort,wc,uniq,tee,tr,split命令