Linux三劍客入門
- 2019 年 10 月 10 日
- 筆記
grep文本過濾工具
grep命令是Linux系統中最重要的命令之一,功能是從文本文件
或管道數據流
中篩選匹配的行
和數據
,如果再配合正則表達式
,功能十分強大,是Linux運維人員必備的命令
語法:
grep [options] [pattern] [file] 命令 參數 匹配模式 文件數據
grep命令里的匹配模式
就是你想要找的東西,可以是普通的文字元號
,也可以是正則表達式
參數選項 |
解釋說明 |
---|---|
-v |
排除匹配結果 |
-n |
顯示匹配行與行號 |
-i |
不區分大小寫 |
-c |
只統計匹配的行數 |
-E |
使用egrep命令 |
–color=auto |
為grep過濾結果添加顏色 |
-w |
只匹配過濾的單詞 |
-o |
只輸出匹配的內容 |
案例
cat /etc/passwd > /tmp/test_grep.txt grep "login" /tmp/test_grep.txt -n #找出login有關行 grep "login" /tmp/test_grep.txt -n -v #找出沒有login的行 grep "ROOT" /tmp/test_grep.txt -i #忽略大小寫,找出root有關行 grep -E "root|sync" /tmp/test_grep.txt --color=auto #同時過濾出root和sync有關行 grep "login" /tmp/test_grep.txt -c #統計匹配結果的行數 grep "login" /tmp/test_grep.txt -n -o #只輸出匹配出的內容 grep "oldboy" /tmp/test_grep.txt -w #完整匹配,字元串精確匹配,整個單詞 grep -E "^#|^$" /tmp/test_grep.txt #過濾掉空白和注釋行
sed字元流編輯器
注意sed和awk使用單引號,雙引號有特殊解釋
sed是Stream Editor(字元流編輯器)的縮寫,簡稱流編輯器。
sed是操作、過濾和轉換文本內容的強大工具。常用功能包括對文件實現快速增刪改查,其中查詢的功能中最常用的兩大功能是過濾(過濾指定字元串)、取行(取出指定行)。
語法:
sed [選項] [sed內置命令字元] [輸入文件]
選項:
參數選項 |
解釋 |
---|---|
-n |
取消默認sed的輸出,常與sed內置命令p一起用 |
-i |
直接將修改結果寫入文件,不用-i,sed修改的是記憶體數據 |
sed的內置命令字元
用於對文件進行不同的操作功能,如對文件增刪改查
sed常用內置命令字元
:
sed的內置命令字元 |
解釋 |
---|---|
a |
append,對文本追加,在指定行後面添加一行/多行文本 |
d |
Delete,刪除匹配行 |
i |
insert,表示插入文本,在指定行前添加一行/多行文本 |
p |
Print ,列印匹配行的內容,通常p與-n一起用 |
s/正則/替換內容/g |
匹配正則內容,然後替換內容(支援正則),結尾g代表全局匹配 |
案例:
[root@pylinux tmp]# cat student.txt 1,oldboy,100 2,alex,99 3,wupeiqi,80 4,yuchao,60 #不加-i參數,以下命令都不會寫入如文件,僅修改記憶體數據 sed 'a heiheihei' student.txt #匹配每一行,在下一行添加heiheihei sed '2a heiheihei' student.txt #在第二行下面,添加heiheihei sed '3d' student.txt #刪除第三行 sed '2i haha' student.txt #在第二行上面,添加haha sed '2a heihandadada' student.txt #在第二行下面,添加多行數據 sed '1,2d' student.txt #刪除1和2行 sed 's/wupeiqi/WUPEIQI/g' student.txt #吧wupeiqi換成WUPEIQI sed 's#wupeiqi#WUPEIQI#g' student.txt #效果同上 sed '2p' student.txt -n #列印第二行的內容,sed默認顯示所有結果,-n不顯示默認輸出 sed '1,3p' student.txt -n #顯示1到3行的內容 sed '11,$d' student.txt #刪除11行一直到文件結尾
awk基礎入門
awk是Linux實際工作中最重要的強大工具.
awk不僅是Linux系統一個命令,也是種程式語言,可以處理數據/文件生成Excel。
語法:
awk [option] 'pattern{action}' file .. 命令 參數 '條件{動作}' 文件..
參數:
參數 |
解釋 |
---|---|
-F |
指定欄位分割 |
-v |
定義或修改awk內部變數 |
案例:
- awk的條件 NR表示行號,NR==5表示第五行
- awk後面內容請使用單引號,雙引號有特殊解析
awk 'NR==2,NR==5' test_grep.txt #顯示第2到5行之間的內容
awk '{print NR,$0}' test_grep.txt #給所有內容加上行號,如同實現cat -n 解釋:NR 表示行號,$0表示一整行的內容,print是awk的命令,列印出結果,{print NR,$0}是awk固定語法
awk 'NR==2||NR==6 {print NR,$0}' test_grep.txt #顯示文本的第二行和第六行 awk 'NR==2,NR==6 {print NR,$0}' test_grep.txt #顯示文本的第二行到第六行
awk -F ":" '{print NR,$1,$3,$NF}' test_grep.txt 解釋:-F 指定分隔符,以冒號分割 '{print NR,$1,$3,$NF}' 列印出NR行號,$1第一列 $3第三列 $NF最後一列,注意$0表示整行
- awk的替換查找函數,gsub()
awk '{gsub("bin","BIN",$0);print $0}' test_grep.txt 解釋:gsub("想替換的內容","替換後的內容",在一整行都替換;顯示替換後的整行結果)
- 取出網卡的ip地址,注意每台機器的資訊不一樣
方法一:[root@pylinux tmp]# ifconfig eth0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.141.32.137 netmask 255.255.192.0 broadcast 10.141.63.255 ether 52:54:00:4f:ab:36 txqueuelen 1000 (Ethernet) RX packets 32262057 bytes 4978629753 (4.6 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 38885574 bytes 7916319323 (7.3 GiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ifconfig eth0| awk -F "inet|netmask" 'NR==2 {print $2}' 解釋:因為這裡資訊左右兩邊是inet和netmask,因此以它倆分割 顯示第二行的結果,第二列的資訊 方法二: [root@pylinux tmp]# ip addr show eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 52:54:00:4f:ab:36 brd ff:ff:ff:ff:ff:ff inet 10.141.32.137/18 brd 10.141.63.255 scope global eth0 valid_lft forever preferred_lft forever ip addr show eth0 |awk -F "inet|/18" 'NR==3 {print $2}' 解釋:同理 方法三:用不同的分隔符處理 ifconfig eth0|awk -F " " 'NR==2 {print $2}'
- 搜狐面試題
處理如下文件內容,將域名
取出且根據域名計數排序
https://www.baidu.com/index.html https://sohu.com/index.html https://sports.sohu.com/index.html https://sports.sohu.com/index2.html https://sports.sohu.com/index3.html http://it.sohu.com/index.html http://it.sohu.com/index2.html
解法:
awk -F "/" '{print $3}' test_html.txt |sort|uniq -c