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
posted @ 2019-09-28 15:24  py鱼  阅读(1780)  评论(0编辑  收藏  举报
点我回主页