以下是Shell學習1-2天學習筆記
————————-我是分隔字元—————————
硬體去執行, 核心與硬體之間進行操作。
命令解析器。
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 搜尋匹配 支援Regex
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