当前位置:首页>Linux>linux之shell脚本三剑客grep、sed、awk的使用

linux之shell脚本三剑客grep、sed、awk的使用

  • 2026-10-11 08:39:38
linux之shell脚本三剑客grep、sed、awk的使用

文章概要:本文主要介绍shell脚本中的三剑客,grep、sed、awk的使用。

一.grep使用

1.1 egrep和grep的使用

    筛选出文本中指定条件的行:以行为单位,逐行进行处理,默认只"输出"与表达式相匹配的"文本行"。 egrep:扩展正则,grep:基本正则。

1.2 语法

egrep [参数] '正则(单引号)'  文件

[参数]说明:

(1)-i:忽略大小写(2)-v:去反(3)-c:统计匹配的行数(4)-q:无任何输出,一般用于检测命令是否执行成功(5)-n:显示出匹配结果所在行号(6)--color:标红显示匹配字符串

1.3 符号匹配规则

1.3.1 整体 和 或匹配

(1)(ab):匹配包含(ab)的行

(2)| : root | bin :匹配root或者bin

1.3.2 行首尾及单字匹配

(1)^:匹配以什么开头(^abc:以abc开头的行)

(2)$:匹配以什么结尾(abc$:以abc结尾的行)

(3).:匹配任意单个字符

1.3.3 未定匹配次数

(1)+:至少匹配1次( (ab)+:一个或者多个连续的ab)

(2)?:最多匹配1次(a?:0个或1个a)

(3)*:代表次数,匹配前一个字符的0或任意次数(不可单独使用)

1.3.4 {}限定次数匹配

(1)(){n}:匹配n次( (ab){2}:匹配abab)

(2)(){n,m}:匹配n-m次数 ( (ab){1,2}:匹配ab,abab)

(3)(){n,}:至少匹配n次( (ab){2,}:匹配abab及以上的连续)

1.3.5 []范围内单字匹配:[]内可加^取反[^]

(1)[a3?]:匹配a,3,?的行 == .

(2)[a-z]:匹配任意小写字母的行

(3)[A-Z]:匹配任意大写字母的行

(4)[0-9]:匹配任意数字的行

(5)[a-Z0-9]:匹配任意数字或者字母的行

(6)[^A-Z]:匹配包括非大写字母的行

(7)^[^a-z]:匹配非小写字母开头的行

1.3.6 转义字符的边界匹配

(1)\b:单词边界,\broot\b,严格匹配root

(2)\<:单词开头,\<th,th开头的单词

(3)\>:单词结束,一般与\<结合使用,\<root\> 等同于 \broot\b

(4)\w:匹配数字,字母,下划线,所在行,

(5)\s:匹配空白所在行,

(6)\d:匹配[0-9]的数字=[0-9],用法:grep -P '\d' user 

二.sed的使用

2.1 作用:

    非交互式对文本进行增,删,改,查等操作,

    逐行处理,将结果输出到屏幕

    每个指令之间用//分隔:sed -rn "/^(root)|^(bin)/p" user

2.2 语法:

格式1:(单引号)

 sed [参数] '/条件/和指令'  文件 (条件为行号或者/正则/(扩展正则加上-r),指令为参数)

格式2:

命令 | sed [参数]  '条件和指令'

参数说明

(1)-n:屏蔽输出,不加默认输出全部原文内容(2)-r:启用扩展的正则表达式,不写支持基本(3)-i:修改原文件内容,不加的时候所有操作只输出效果,不改原文件

指令说明

(1)p:(查)打印行,2,4p:打印2,3,4行,2p;4p:打印2行4行 sed -rn "/1/p" user(2)d:(删)删除行,(!d删除不包含什么的行),2,4d:删除2,3,4行(3)s:(改)替换,不加-n内容全部输出逐行替换(4)sed文本块处理:增(1)i:行前面插入文本,2ixx:在第2行前添加文本xx(2)a:行后插入文本,2axx:在第2行后添加文本xx(3)c:替换当前行,2cxx:将第二行的内容替换为xx

2.3 sed与正则结合例子:

    sed -rn '/xx/s/2017/2002/g a.txt:找含有xx的行,将里面的所有2017替换成2002

2.4 sed特殊用法

    (1)sed -n '1!p' 文件名: 输出除了第一行的内容,!表示取反

    (2)sed -n '$p' xx    :输出最后一行

    (3)sed -n '='  xx  :输出行号,$=:输出最后一行的行号

    (4)sed -n '1~2p' xx :打印奇数行,1为基准,~2,起跳2行

三.awk的使用

3.1 作用

将满足条件的行和列内容输出

3.2 语法

(1) awk [参数] '条件{指令}' 文件,{}表达式语句块

(2) 前置命令 | awk [参数] '条件{指令}'  文件

参数说明

-F:指定分隔符,(省略默认为空格或者Tab位)-F"[:/]":指定多个分隔符号

3.3 awk行列与正则的组合:正则前面有其它操作

    (1)~:正则匹配操作符

    awk -F: '$1~/root/{print}' a.txt:这里的~表示连接正则

3.4 awk内置变量

    (1)FS:与-F一样

    (2)$0:当前读入的整行内容

    (3)$num:第num列内容,如$1,$3分别表示第1列与第3列

    (4)NF:当前行的总列数,awk '{print $NF}' b打印最后一列

    (5)NR:当前的行数

3.5 awk条件设置

    (1) ==, !+, >, <, >=, >=

    (2)&&, ||

    (3)+, -, *, %, /, ++, --...

    例子:awk 'NF==2{print}' a.txt :打印第二行

3.6 awk数组

    (1)定义: 数组名[下标]=元素值

    (2)遍历数组

        awk 'BEGIN{a[0]=11;a[2]=33;for(i in a) {print i,a[i]}}'

    (3)统计某一个ip出现次数:

        awk '{IP[$1]++}END{for(i in IP)print i"访问次数为:"IP[i]}' ip.txt

最新文章

随机文章