Linux三劍客入門


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 heiha\ndadada' 	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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM