Linux小工具的應用,grep,sort,wc,cut

小工具的使用:


1、管道(|)連接多個命令的工具,進程之間通訊的一種方式
用法:命令1 | 命令2 | 命令3....

2、grep工具行過濾,打印出的結果一行一行的
用法:grep options 關鍵字 處理的文件
options:
-i: 不區分大小寫
-v: 查找不包含指定內容的行,反向選擇
-w: 按單詞搜索
-c: 統計匹配到的次數[行數]
-n: 顯示行號
-r: 逐層遍歷目錄查找
-A: 顯示匹配行及前面多少行
grep -A 3 關鍵字 文件名
-B: 顯示匹配行及後面多少行
-C: 顯示匹配行前後多少行
--color=auto :可以將找到的關鍵詞部分加上顏色的顯示
grep --color=auto 關鍵字 文件名
-l:只列出匹配的文件名
-L:列出不匹配的文件名
-o ----顯示匹配到的關鍵字
-e: 使用正則搜索 grep -e xxx =egrep xxx
^key:以什麼開頭
key$:以什麼結尾

每次過濾都顯示顏色:
vim ~/.bashrc
alias grep='grep --color=auto'
source ~/.bashrc


3、cut工具:截取某一個字符,列過濾
-c :以字符爲單位進行分割。
-d :自定義分隔符,默認爲製表符。
-f :與-d一起使用,指定顯示哪個區域。

# cut -d: -f1,3,6 passwd|head ---head查看前10行,tail 後10行,打印第1,3,6行
# cut -d: -f1 passwd|head ----以:號分隔開的區域,f1爲第一塊區域,f2爲第2塊區域,一次類推
inet addr:172.16.13.74 Bcast:172.16.13.255 Mask:255.255.255.0
區域1 區域2 區域3 區域4

# cut -c10,15 passwd |head
# cut -c10-15 passwd |head
打印第10-15的字符
# cut -c10- passwd |head 打印第10個字符直到最後字符

注意:
cut的-d選項的默認間隔符就是製表符,所以當你就是要使用製表符的時候,完全就可以省略-d選項,而直接用-f來取域就可以。
-b和-c選項,-n表示從第一個字節到第n個字節,而n-表示從第n個字節到行尾

課堂練習:
用小工具列出你當系統的運行級別。5/3


4、sort工具
排序,將文件的每一行作爲一個單位,從首字符向後,依次按ASCII碼值進行比較,最後將他們按升序輸出。
-u :去除重複行,不管是否連續,都會去除
-r :降序排列,默認是升序
-o :將排序結果輸出到文件中
-n :以數字排序,默認是按字符排序
-t :分隔符
-k :第N列
-b :忽略前導空格。
-R :隨機排序,每次運行的結果均不同。
> ----將文件重定向(保存)到其他文件中
sort -nr -t: -k3 passwd |head




5、uniq 去除連續重複行,不連續不去除
uniq options filename
[options]
-i : 忽略大小寫
-c: 統計重複行次數
-d:只顯示重複行




6、tee:從標準輸入讀取並寫入標準輸出和文件
echo 標準輸出的內容|tee filename 輸出的內容會覆蓋filenme 的內容
tee 雙向覆蓋重定向<屏幕輸出|文本輸入>

tee -a 雙向追加重定向<屏幕輸出|文本輸入>
echo 標準輸出的內容|tee -a filename
注意:如果對源文件處理再重定向到源文件的話會把源文件的所有的內容刪除,並且不會重定向成功
例如:# cp /etc/passwd /tmp/passwd
# grep ^root /tmp/passwd |tee /tmp/passwd

結果:
# cat /tmp/passwd 什麼都沒有。


7、paste 合併文件行
-d:自定義間隔符,默認是tab
-s:串行處理,非並行
用法:
paste file1 file2 ----兩個文件不需要相同行數,行數對應合併
paste -d符號 file1 file2 --其中-d後面接的是連接符號。
例如:file1 內容爲A
file2內容爲1
paste -d: file1 file2
結果爲:A:1


8、tr 替換 接收輸入流文件
tr用來從標準輸入中通過替換或刪除操作進行字符轉換。
tr主要用於刪除文件中控制字符或進行字符轉換。
使用tr時要轉換兩個字符串:字符串1用於查詢,字符串2用於處理各種轉換。
-d 刪除字符串1中所有輸入字符。
-s 刪除所有重複出現字符序列,只保留第一個;即將重複出現字符串壓縮爲一個字符串。 tr -s '[a-z]' < 9、pass
tr '[a-z]' '[A-Z]' < pass

a-z 任意小寫
A-Z 任意大寫
0-9 任意數字
[:alnum:] all letters and digits//所有字母和數字
[:alpha:] all letters//所有字母
[:blank:] all horizontal whitespace//所有水平空白
[:cntrl:] all control characters//所有控制字符
\b Ctrl-H 退格符
\f Ctrl-L 走行換頁
\n Ctrl-J 新行
\r Ctrl-M 回車
\t Ctrl-I tab鍵
[:digit:] all digits//所有數字
[:graph:] all printable characters, not including space//所有可打印的字符,不包含空格
[:lower:] all lower case letters//所有小寫字母
[:print:] all printable characters, including space//所有可打印的字符,包含空格
[:punct:] all punctuation characters//所有的標點符號
[:space:] all horizontal or vertical whitespace//所有水平或垂直的空格
[:upper:] all upper case letters//所有大寫字母
[:xdigit:] all hexadecimal digits//所有十六進制數字
[=CHAR=] all characters which are equivalent to CHAR//所有字符



10、diff 比較文件的差異
1、正常格式(normal diff)
2、上下文格式(context diff) -c參數
3、合併格式(unified diff) -u參數
-i:忽略大小寫
-B:忽略空行
-b:忽略空格

[root@node1 Desktop]# cat file1
a
b
c
3
e

[root@node1 Desktop]# cat file2
a
b
c
d
e
8
[root@node1 Desktop]# diff file1 file2
4c4
< 3 第二個文件相對第一個文件少了1個3
---
> d
6c6
<
---
> 8
[root@node1 Desktop]# diff file2 file1
4c4
< d
---
> 3
6c6
< 8
---
>
[root@node1 Desktop]# diff -c file2 file1
***(代表第一個文件) file2 2017-04-21 17:25:58.448733455 +0800
--- file1 2017-04-21 17:24:46.026733277 +0800
***************
*** 1,6 ****
a
b
c
! d
e
! 8
--- 1,6 ----
a
b
c
! 3
e
!
[root@node1 Desktop]# diff -u file2 file1
--- file2 2017-04-21 17:25:58.448733455 +0800
+++ file1 2017-04-21 17:24:46.026733277 +0800
@@ -1,6 +1,6 @@
a
b
c
-d
+3
e
-8
+
[root@node1 Desktop]# diff -u file1 file2
--- file1 2017-04-21 17:24:46.026733277 +0800
+++ file2 2017-04-21 17:25:58.448733455 +0800
@@ -1,6 +1,6 @@
a
b
c
-3
+d
e
-
+8
[root@node1 Desktop]#

11、wc工具: 統計行 字符 單詞數
-l: 打印行數
-c: 打印字節數
-m: 打印字符數
-w: 打印單詞數
-L: 打印最長行的長度


4、擴展:
(一)“字節”的定義
字節(Byte)是一種計量單位,表示數據量多少,它是計算機信息技術用於計量存儲容量的一種計量單位。
(二)“字符”的定義
字符是指計算機中使用的文字和符號,比如1、2、3、A、B、C、~!·#¥%……—*()——+、等等。
(三)“字節”與“字符”
不同編碼裏,字符和字節的對應關係不同:
①ASCII碼中,一個英文字母(不分大小寫)佔一個字節的空間,一箇中文漢字佔兩個字節的空間。
②UTF-8編碼中,一個英文字符等於一個字節,一箇中文(含繁體)等於三個字節。
③Unicode編碼中,一個英文等於兩個字節,一箇中文(含繁體)等於兩個字節。
符號:英文標點佔一個字節,中文標點佔兩個字節。舉例:英文句號“.”佔1個字節的大小,中文句號“。”佔2個字節的大小。
④UTF-16編碼中,一個英文字母字符或一個漢字字符存儲都需要2個字節(Unicode擴展區的一些漢字存儲需要4個字節)。
⑤UTF-32編碼中,世界上任何字符的存儲都需要4個字節。

du和df工具:

1)du:統計目錄或文件大小
-h:以人性化的方式查看 KB、MB、GB
-s:顯示總和

2)df:查看文件系統的使用情況
-H:使用1000位進制單位,而不是1024
-h:以人性化的方式查看 KB、MB、GB
-T:顯示文件系統類型
-i:列出inode信息


作業1:
分別截取IP;截取NETMASK;截取廣播地址(Bcast);截取MAC地址
ifconfig eth0
ifconfig eth0 |grep Bcast |cut -d: -f2|tr -d '[:alpha:]'
ifconfig eth0 |grep Bcast |cut -d: -f2|tr -d '[:alpha:]'|tr -d '[:]'
ifconfig eth0 |grep MAC地址|cut -c -39-

作業2:
將系統中所有普通用戶的用戶名、密碼和默認shell保存到一個文件中,要求用戶名密碼和默認shell之間用tab鍵分割
cat /etc/passwd
普通用戶:1-500
grep bash& /etc/passwd |grep ^root -v |cut -d: -f1,2,7 |tr '[:]' '[\t]'





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章