linux Shell學習筆記第一天

————————-我是分隔符—————————

硬體去執行, 內核與硬體之間進行操作。

命令解析器。

shell腳本的組成元素

系統命令

文本處理工具(sort、grep、sed、awk…)

變數

條件判斷

環循結構

函數

Shell Scripts Center(SSC)

———————————————————————————-

非負Grep / awk

幾天。 統計Wc

Sort 排序 sort|head / sed欄位處理 awk

數據區域判斷 awk |wc

顯示文本: echo [選項] 文本

-n 不要自動換行

-e 解析轉義符

a 發出警告音

c 最後不加上換行符號

f 換行

r 回車

彩色文本

Echo –e 「33[40;35m….]」

echo 「Hello,world」

echo –e 「33[40;35mHell,world33[0m"

sort [選項]輸入文件

-o 輸出文件

-d 按字典順序排序 a-z

-n 按數字大小輸出 0-9

-r 逆序輸出 z-a 9-0

-k 指定分類是域上的數字分類

-t 域分割符;用非空格或tab鍵分割域

more /etc/passwd 分頁顯示

sort –d /etc/passwd|more 中間的|是反倒符號。 將前面處理的交給後面處理 先排序。後分頁顯示

sort –k3 –n –r –t: /etc/passwd|more

從大到小

wc [參數] [文件名]

-c 統計字元數量

-l統計行數

-w 統計單詞數量 空格區分

diff [選項] 文件/目錄 文件/目錄

diff /etc/passwd /etc/passwd.bak

-q 僅顯示有無差異,不顯示詳細的信息

-c 顯示全部內文,並標出不同之處。

-b 不檢查空格字元的不同

-B 不檢查空白行

-r 比較子目錄中的文件。

grep 搜索匹配 支持正則表達式

grep

-c 只列印匹配模式的行編號記數

-I 在匹配文本時忽略大小寫

-n 在每行前顯示其行編號

-v 逆向輸出,列印不匹配的行

-f file 要匹配的字元串列表在filezhong

grep 『[Tt]his" file1.txt 設置大小寫

grep 『^[^#]『 file2.txt 不匹配行首

grep 「s…n」 file3.txt 匹配任意字元

sed 行編輯命令s 替代

i 插入

a 附加

d 刪除全部匹配的行

D 刪除首次匹配的行

sed可以做什麼(」行」為基礎)

刪除

改變

添加

插入

替換

示例

sed –n "1,4p" /etc/passwd p是列印 -n 不顯示原文件 列印1-4行

sed 『/80/D" file.txt 首次出現80的行進行刪除

sed 『s/var/usr/g" file.txt 將所有的var替換成usr g代表所有

sed "50,$s/help/man/g" file.txt 替換從50行到最後一行的help替換為man 前49不管

awk 可以處理列,也可以處理行,可以定位到第幾行,第幾列

awk [選項] 『awk腳本" 輸入文件

-F fs 使用fs作為輸入記錄的欄位分隔符 = sort –t

-f filename 從文件filename讀取awk_script(awk腳本)

-v var=value 為awk_script 設置變數

awk的內置變數

變數 功能 默認 FS =大寫F 輸入欄位分隔符 空格或tab RS 輸入記錄分隔符 換行 OFS =out FS 輸出欄位分隔符 空格或tab ORS 輸出記錄分隔符 換行 NF 常用 當前記錄非空欄位的編號 NR 常用 從所有文件讀入的記錄號

示例

awk –F : 『{print NR,$1,$2}" /etc/passwd

awk –F : 『{print NR,$1,$NF}" /etc/passwd $NF 提取最後一行

awk –F : 『NR%10==5{PRINT nr,$0}" /etc/passwd NR= 當前處理的行數 除10求余=5列印當前的行數,進行輸出 $0 整行輸出,比如5、15、25 列印出來

awk –F : 『NR==8,NR==13 {print NR,$0}" /etc/passwd 指定8行和13行。

awk工作原理(工具)

$NF $NR $1 第一列 $2 第二列 $0 一整行

實際測試

awk –F: 『{print $1,$3}"/etc/passwd

awk –F: 『{print $1,$NF}"/etc/passwd

awk –F: 『{print NR,$1,$NF}"/etc/passwd NR行號

awk –F: 『NR==5,NR==8{print NR,$1,$NF}"/etc/passwd 指定5-8行

awk –F: 『NR%10==5{print NR,$1,$NF}"/etc/passwd 除10求余

課程示例測試

1、grep –v 「-」 file.txt 去除所有帶負號的數據 -v顯示沒有的 沒有的話則顯示只有-的

2、wc -l file.txt顯示所有行數 grep –v 「-」 file.txt |wc –l 統計所有沒有負數的

3、sort –n –r –k4 file.txt |sed –n "1p" 排序第四列 沒有分隔符(即空格),-n數字 –r 從大到小 sed管道 顯示第一行 sed –n不顯示原文件

sort –n –r –k4 file.txt |head -1 讀取第一個數據 head 第一行

4、awk 『{if($NF>3){print $0}}" file.txt NF 最後一列大於3 則列印一整行

5、awk 『{if($4>0,&&$4<15){print $0}}" file.txt 列出第四列 大於0小於15 輸出整行

awk 『{if($4>0,&&$4<15){print $0}}" file.txt |wc –l 顯示行數

練習:

grep和awk

awk 『{if($1>200801011){[print $0}}"file.txt

2、

處理命令回顧:

統計文本 wc

文本排序 sort

文本/目錄對比 diff

在文件中查找關鍵行 grep / sed

在行文本中添、刪、改 sed

在列文本中顯示指定列 awk

在列文本中進行計算 awk

在列文本進行條件選擇 awk

詳細出處參考:http://www.jb51.net/article/25728.htm


推薦閱讀:

凈空法師法語:冤親債主希望你早一天成佛來度他
365天中哪一天出生的人,未來財力最雄厚
最美芭蕾《最後一天》 Polina Semionova
一天比一天熱,看完不許笑!
一天一句職場經驗:男人心善,日後討飯!

TAG:學習 | 筆記 | 一天 |