本篇博客將介紹linux系統中比較經常使用的 bash 以及用法,例如被稱爲Linux系統中的"三劍客"--grep , sed , awk ; 還有cut ,seq , sort , wc , uniq , diff ,通配符等 .linux
在Linux系統中查找文件通常都會用到通配符 , 管道 , bash技巧命令來輸出咱們想要獲得的結果 , 首先咱們先了解通配符的做用:正則表達式
一 . 通配符shell
做用 : 是用來在文件搜索時代替文件名中的一個或多個正真字符 .vim
經常使用通配符符號有 : ? * []bash
? 做用 : 匹配任意單個字符 .編輯器
例 : ls /dev/tty? , 輸出的結果爲 /dev/tty 加任意一個字符 , 如圖 :ide
再嘗試使用命令 ls /dev/tty?? , 結果爲 : 函數
* 做用 : 匹配任意0個或多個字符 , 意爲全部 ui
例 : ls /dev/tty*編碼
同理 , ls /etc/*.conf , 輸出的結果爲顯示目錄 /etc 下的全部以conf結尾的文件 , 這裏不作嘗試 .
[] 做用 : 匹配[]中的任意單個字符
例 : ls /dev/tty[123]5
也能夠連續一個範圍進行匹配 , 如 ls /dev/tty[1-6]5
管道符 | :將前一個命令的結果(標準輸出) 傳給後一個命令繼續處理
例 : head -6 /etc/passwd | cat -n #查看文件/etc/passswd的前6行 後, 再用cat查看顯示行號
說明 : 管道符能夠一個接着一個 , 例在上面的例子上再輸出前3行信息
二 . Linux系統三劍客其二(grep , sed )入門
awk用法見博客 :https://blog.51cto.com/14181896/2359808
1 . grep : 匹配關鍵字 , 顯示文件中關鍵字所在的整行內容
例 : grep root /etc/passwd #顯示/etc/passwd文件中所包含root關鍵字的行
經常使用選項 : -n 顯示行號
-i 不區分大小寫
-v 取反
-c 帶關鍵字的函數
-n 靜默執行 , 不在屏幕顯示匹配到的內容 , 一般用於shell腳本
更多選項用法能夠用 grep --help 查看用法
2 . sed流編輯器
是一種文本編輯器 , 默認狀況下是不會修改原文件的 , 也是一種非交互式的編輯器
工做原理 : 一行一行處理文件 , 當從文件中讀取一行後 , 首先放到模式空間(內存緩衝區)匹配關鍵字進行相應的處理 , 處理完將結果輸出到屏幕上 , 接着處理下一行內容 , 直到全部行都讀取完畢 , sed 結束 .
sed的語法 : sed [option] '地址命令' 文件名
經常使用選項 : -n 靜默輸出 , 關閉模式空間的輸出 , 不會輸出未匹配到的行
-e 容許進行多項編輯 , 應用於對同一行作屢次處理 , -e "命令1" -e "命令2" ..-e "命令n"
-f 後接sed腳本 , 指定執行的sed腳本
-r 容許使用擴展正則
-i 直接做用於原文件
sed 地址定址 :
定址用於決定對哪些行進行編輯 , 地址形式能夠是數字 , 正則表達式或兩者結合 . 若是沒有指定地址 , sed將處理輸入文件中的全部行 .
例 : 文件準備 , 將/etc/passwd文件中的前10行內容添加行號覆蓋寫入/pass文件中 , 而後查看/pass文件中的內容
輸出單行 :
sed -n '1p' /pass #顯示/pass文件中的第一行 ,1p 指print 第1行
同理 , 輸出/pass文件第5行 :
輸出指定的多行 :
指定行數 , 行數號與行數號之間用逗號隔開
打印從i行開始的後幾行 (i,+n)
打印從第1行開始 , 再加上n行爲止
關鍵字匹配: 處理符合模式(匹配關鍵字)的行 , -r 表示啓用正則表達式
例 : 顯示/etc/passwd文件中以root開頭的內容
sed的子命令 :
sed的子命令告訴sed對指定行進行何種操做 , 包括打印p , 刪除d , 修改(追加a , 插入i , 替換s , 字符替換c)
將/etc/passwd這個文件前10行導入新文件/pass1: head /etc/passwd > /pass1
d : 刪除(delete)
sed '/^root/d' /pass1 處理/pass1文件顯示刪除以root開頭的行號
i : (i\text) 在符合模式的行的上面插入(insert)\之後的text文本 , 結果將在終端上顯示 , 默認不會改變原文件
sed '/^root/i\hello' /pass1
a : (a\text) 在符合模式的行的下面追加\之後的text文本 , 處理結果同 i
結合上面兩個例子 , 使用 -e 選項 同時執行 , 結果如圖所示 :
c : (c\text) 用新文本覆蓋符合模式的行中的文本
例 : 用 hello world 覆蓋/pass1文件中的第 2 行
s : 用一個字符替換另外一個字符
例 : sed 's/root/ROOT/g' /pass1 #指定替換全部匹配到的
sed 's/root/ROOT/2' /pass1 #指定替換匹配到的的第二個
cut命令 : 提取文件中指定的字段 , 字符內容 . 默認分隔符爲空格
格式 : cut [選項].. [文件]..
經常使用選項 : -b 按照字節切 , utf-8編碼中每一個漢字佔三個字節(比如4個漢字就取得12個字節)
-c 按照字符切
-d 指定分隔符
-f 指定以分隔符分割的哪一個字段
實例 : 將 /etc/passwd 文件中的前5行覆蓋寫入/pass 文件中( head -5 /etc/passwd > /pass)
顯示/pass文件中以 : 分隔的第6行內容 , 家目錄內容:
顯示/pass文件中的第一列(用戶名)和第7列(shell解釋器)的內容:
同理 : cut -d : -f 1-3 /pass 取1~3列內容
以字符大小切 , 例 :echo '×××' | cut -b 1-12
seq : 按順序打印出一些數字 , 例如: 1 2 3 4 5 ...
用法 : seq [選項] ...尾數
seq [選項] ... 首數 尾數
seq [選項] ...首數 增量 尾數
實例 : seq 5 #按順序輸出1~5的數
同理 : seq 5~10 #按順序輸出5~10的數
seq 1 2 10 #輸出1~10之間的奇數
seq 10 -1 0 #輸入10~0之間的數
補齊輸出 : -w 例 : seq -w 1 50 200
擴 : 使用echo命令也能實現seq一樣的效果 , 格式 echo {首數..尾數..增量}
sort排序 : 排序分爲升序 和 降序 , 默認是按升序進行排列
常見選項 : -n (--numeric--sort) 根據數值比較 , 默認是按單個字符來比較
-r 逆序輸出排序結果
-t 指定分割符
-k 排序鍵(key , 即排序的列字段)
-u 去掉重複行
實例 : seq 1 10 | sort
seq 1 10 | sort -n
seq 1 10 | sort - nr
sort -t : -k 2 -n 文件名 #按 : 分割開的以第2列是數值大小排序 (使用的最多)
例 : 按/etc/passwd 文件中第3列uid數值大小進行排列
wc : 統計行數 , 單詞數 , 字節數
例 : wc /etc/passwd #在/etc/passwd這個文件中有45行 , 92個單詞數 , 2356個字節
wc -l 統計行數
wc -c 統計字節數
wc -m 統計單詞數
統計 /bin 目錄下有多少個命令
uniq : 合併連續重複的行
經常使用選項 : -u 只顯示沒有連續重複的行
-c 統計連續重複行的次數
-d 只顯示連續重複行一次 , 哪一行連續重複了就顯示哪行
-i 忽略大小寫
例 : 準備一個文件 a.txt , 在文件輸入內容並查看a.txt如圖所示 :
uniq -c a.txt #統計連續出現的次數
uniq a.txt #對a.txt 文件中連續重複的行只顯示一次
uniq -u a.txt #不顯示連續重複的行
uniq -d a.txt #僅顯示連續出現的內容一次
結合sort排序使用 , 顯示沒有重複的行
diff 命令 :
vimdiff : 比較兩個文件的差別
實例 : 準備兩個存在差別的文件 :
head -3 /etc/passwd > /tmp/pass3
head -5 /etc/passswd > /tmp/pass5
準備好上面兩個文件以後 ,先使用vimdiff 對比/pass3 和 /pass5的文件內容 , 再用diff命令對比兩個文件的差別 , 將顯示出兩個文件不一樣內容:
經過顯示差別 , 能夠製做補丁 :
diff /pass3 /pass5 > /pass35.patch #製做補丁文件/pass35.patch(增長內容) 並查看此文件 :
diff /pass5 /pass3 > /pass53.pattch #製做補丁文件/pass53.patch(減小內容)
patch 打補丁 :
首先安裝patch -- yum install -y patch ,而後給/pass3 文件打補丁 , 最後查看/pass3文件內容 :
同理 patch /pass3 /pass53.patch 會減小/pass3的最後兩行
tr : 替換字符 , 被替換的字符與替換的字符數必須是相等的
用法 : tr 舊字符 新字符
實例 : 準備一個文件 b.txt , 內容如圖 :
cat b.txt | tr 20 89 #將cat b.txt 結果中的20 替換成了 89(不改變原文件)
cat a.txt | tr "a-z" "A-Z" #替換時一一替換 , 字母變成大寫
以上都是比較常見的 bash 和 它們的用法 , 下一篇再介紹 awk 的簡介做用以及它的入門操做