前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux三剑客入门

Linux三剑客入门

作者头像
超蛋lhy
发布2019-09-29 17:19:59
1.3K0
发布2019-09-29 17:19:59
举报
文章被收录于专栏:Pythonista

grep文本过滤工具

grep命令是Linux系统中最重要的命令之一,功能是从文本文件管道数据流中筛选匹配的数据,如果再配合正则表达式,功能十分强大,是Linux运维人员必备的命令

语法:

代码语言:javascript
复制
grep [options] [pattern]  [file]

命令  参数   匹配模式   文件数据

grep命令里的匹配模式就是你想要找的东西,可以是普通的文字符号,也可以是正则表达式

参数选项

解释说明

-v

排除匹配结果

-n

显示匹配行与行号

-i

不区分大小写

-c

只统计匹配的行数

-E

使用egrep命令

--color=auto

为grep过滤结果添加颜色

-w

只匹配过滤的单词

-o

只输出匹配的内容

案例

代码语言:javascript
复制
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是操作、过滤和转换文本内容的强大工具。常用功能包括对文件实现快速增删改查,其中查询的功能中最常用的两大功能是过滤(过滤指定字符串)、取行(取出指定行)。

语法:

代码语言:javascript
复制
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代表全局匹配

案例:

代码语言:javascript
复制
[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。

语法:

代码语言:javascript
复制
awk [option] 'pattern{action}' file ..
命令 参数           '条件{动作}'  文件..

参数:

参数

解释

-F

指定字段分割

-v

定义或修改awk内部变量

案例:

  • awk的条件 NR表示行号,NR==5表示第五行
  • awk后面内容请使用单引号,双引号有特殊解析
代码语言:javascript
复制
awk 'NR==2,NR==5' test_grep.txt         #显示第2到5行之间的内容

代码语言:javascript
复制
awk '{print NR,$0}' test_grep.txt       #给所有内容加上行号,如同实现cat -n
解释:NR 表示行号,$0表示一整行的内容,print是awk的命令,打印出结果,{print NR,$0}是awk固定语法
代码语言:javascript
复制
awk 'NR==2||NR==6 {print NR,$0}' test_grep.txt      #显示文本的第二行和第六行
awk 'NR==2,NR==6 {print NR,$0}' test_grep.txt           #显示文本的第二行到第六行

代码语言:javascript
复制
awk -F ":" '{print NR,$1,$3,$NF}' test_grep.txt     
解释:-F 指定分隔符,以冒号分割
'{print NR,$1,$3,$NF}'  打印出NR行号,$1第一列 $3第三列  $NF最后一列,注意$0表示整行
  • awk的替换查找函数,gsub()
代码语言:javascript
复制
awk '{gsub("bin","BIN",$0);print $0}' test_grep.txt  
解释:gsub("想替换的内容","替换后的内容",在一整行都替换;显示替换后的整行结果)
  • 取出网卡的ip地址,注意每台机器的信息不一样
代码语言:javascript
复制
方法一:[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}'
  • 搜狐面试题

处理如下文件内容,将域名取出且根据域名计数排序

代码语言:javascript
复制
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

解法:

代码语言:javascript
复制
awk -F "/" '{print $3}' test_html.txt |sort|uniq -c
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-09-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • grep文本过滤工具
  • sed字符流编辑器
    • 注意sed和awk使用单引号,双引号有特殊解释
    • awk基础入门
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档