Linux三剑客(grep、awk、sed)

Linux三剑客及使用介绍
Linux 三剑客是(grep,sed,awk)三者的简称,他们通常结合正则一起使用。
grep擅长查找,sed擅长修改文件。awk擅长取列。

一、正则表达式
正则表达式:REGular EXPression, REGEXP
元字符:所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符
 

元字符功能
.匹配任意单个字符
*X* 匹配0或多个X字符
+X+ 匹配至少1个X字符
.*匹配任意多个字符
^匹配首行
$匹配行尾
^$空行
\屏蔽一个元字符的特殊含义
\<锚定词首,其后面的任意字符必须作为单词首部出现
\>锚定词尾,其前面的任意字符必须作为单词的尾部出现
\b单词界定符
test{n}匹配前面为tes后面接n个t的字符串
test{n,m}匹配前面为tes后面接n~m个t的字符串
test{n,}匹配前面为tes后面有n个以上(包含n)的t的字符串
(test){n}将test做完整体匹配有n个test相连的字符串
[abc]包含abc中任意一个字符
[^abc]不包含abc中的任意一个字符(取反)

二、grep的介绍
grep 是一个文本过滤工具
egrp 支持扩展正则

options部分

-v 显示不被pattern匹配到的行
-o 仅显示匹配到的字符串
-n 显示匹配的行号
-i 忽略字符大小写
-A n 显示后n行
-B n 显示前n行
-C n 显示上下n行
-r 递归查找
案列:

[root@ou ~]# grep -n root /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin

 过滤出行首为root的行:

[root@ou ~]# grep  '^root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
1、查找出当前passwd文件中以ftp或者mail开头的行,在屏幕上输出。
		cat passwd|egrep "^ftp|^mail"|xargs echo

2、查找出来/etc/passwd文件里用户名包含liu同时使用bash的用户
		awk -F: '$1 ~ /liu/&& $7 ~ /bash/ {print $0}' passwd 

3、查找出不包含数字的行
		grep -v "[0-9]"

4、查找出/var/log/secure里的ip地址出来
		255.255.255.255
		egrep  "(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])" /var/log/secure

5、写一个表示下面网址的正则表达式出来。例如:
http://www.baidu.com
http://www.sina.com
http://www.163.com
http://www.12306.cn
http://www.qillu.edu
egrep "http://([a-zA-Z0-9]+.)+[a-zA-Z]+"
egrep "https?://([a-zA-Z0-9]+.)+[a-zA-Z]+"

 

三、awk介绍
AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
awk

输入分隔符

​ -F 默认空白

输出分隔符

​ , 默认空格

​ -F : :指定分隔符

​ FS :输入分隔符

​ OFS :输出分隔符

​ $0 :整行

​ NR :行号 number of record

​ NF :一行的字段数量 number of field

cat /etc/passwd|tail -1|awk -F[:/] '{print $8}'
cat /etc/passwd |awk -F : 'BEGIN{num=0;print "开始统计 /etc/passwd文件"} $1 ~/root/ ||$3 > 1005 {print NR,NF,$1,length($1),$(NF-1),$NF,$3,++num}END{print "统计结束",num}'

awk和shell变量交换的问题

  1. 使用 -v选项
    cat /etc/passwd|tail -1|awk -F[:/] '{print $8}'
    cat /etc/passwd |awk -F : 'BEGIN{num=0;print "开始统计 /etc/passwd文件"} $1 ~/root/ ||$3 > 1005 {print NR,NF,$1,length($1),$(NF-1),$NF,$3,++num}END{print "统计结束",num}'
    
  2.  使用双引号 ,但是awk内部的$0 1 等 1 等1等符号前需要使用\转义

    name=root
    cat passwd| awk -F: “/^$name/{print $1, $3}”

  3. 使用单引号,将变量引起来,然后前面加一个$符号再次引用变量的值,相当于取2次值

    sg=3
    awk -F :  '/root/{print $1,$'$sg'}' /etc/passwd
    

awk内置的函数:

length()

int()

sqrt()

system()

String Functions

sub()

index()

length()

split()

三元运算

先使用ifconfig,使用awk显示eth0的入站流量和出站流量(字节)

ifconfig |grep -A 7 "eth0"| awk '$4=="bytes"{print $1 == "RX"? "入站流量:": "出站流量:";print $5}'

 

四、sed 介绍
是一种支持正则表达式的非交互式流编辑器

sed 可依照脚本的指令来处理、编辑文本文件。

Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

sed的常用选项

-n: 只显示匹配处理的行(否则输出所有)
-i: 直接在文件中进行修改,而不是输出到屏幕
-r: 支持扩展正则表达式
-e: 执行多个编辑命令时(一般用 ; 代替)
sed动作说明:

s :替换 通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g
p :打印匹配行。通常 p 会与参数 sed -n 一起运行~
d :删除指定行
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
p命令输出的时候

1,5p 连续
1p;5p 不连续
cat passwd -n |sed -n ‘5,+3p’ 后三行
cat passwd -n |sed -n ‘5,100!p’ 取反
cat passwd -n |sed -n ‘1~2p’ 从第一行开始,步长为2
sed 的空间模式

pattern space --》处理数据的地方–》处理一行数据后,模式空间会清空

hold space --》临时存放数据的地方

题目:查找nginx日志的access.log日志文件 09/Jan/2021:16:37:12 到 09/Jan/2021:16:51:45

cat access.log|sed  -n '/09\/Jan\/2021:16:37:12/,/09\/Jan\/2021:16:51:45/p'

 access.log中09/Jan/2021:16:37:12 和 09/Jan/2021:16:51:45 必须存在

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值