扩展正则表达式egrep与awk应用

扩展正则表达式

扩展正则表达式是基础正则表达式的扩充深化
grep 命令仅支持基础正则表达式,如果使用扩展正则表达式,需要使用egrep 或 awk 命令。

一、 egrep 工具

1.1 扩展元字符

类别作用示例
+匹配前面子表达式1次以上go+d,将匹配至少—个o
匹配前面子表达式0次或者1次o?d,将匹配gd或god
( )将括号中的字符串作为—个整体xyz)+,将匹配xyz 整体1次以上,如xyzxyz
I以或的方式匹配字符串例1∶ goodfood,将匹配good或者food
例2∶g(oolla)d,将匹配good或者glad

1.2 用法示例

查询"wood" “woood” "wooood"等字符串

egrep -n 'wo+d' test.txt

查询"bet" “best” 这两个字符串

egrep -n 'bes?t' test.txt

查询"of" 或"if"或"on" 字符串

egrep -n 'of|if|on' test.txt

查询"tast" “test” 这两个字符串

egrep -n 't(a|e)st' test.txt

二、 awk 工具

awk 是一个功能强大的编辑工具,逐行读取输入文本,并根据指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理,可以在无交互的情况下实现相当复杂的文本操作,被广泛应用于 Shell 脚本,完成各种自动化配置任务。

grep,sed,awk 更是 Shell 编程中经常用到的文本处理工具,被称之为Shell 编程三剑客。

2.1 awk命令格式

awk 选项 ‘模式或条件{编辑命令}’ 文件1 文件2…. //过滤并输出文件中符合条件的内容
awk -f 脚本文件 文件1 文件2… //从脚本中调用的编辑指令,过滤并输出内容

2.2 awk包含几个特殊的内建变量(可直接用)如下所示:

类型作用
FS指定每行文本的字段分隔符,默认为空格或制表位;
NF当前处理的行的字段个数;
NR当前处理的行的行号(序数);
$0当前处理的行的整行内容;
$n当前处理的行的第n个字段(第n列);
FILENAME被处理的文件名;
RS数据记录分隔,默认为\n,即每行为一条记录。

2.3 用法示例

按行输出文本

1 输出所有内容,等同于cat test.txt

awk '{print}' test.txt

2 输出所有内容,等同于cat test.txt

awk '{print $0}' test.txt

3 输出第1~3行内容

awk 'NR==1,NR==3{print}' test.txt

4 输出第1~3行内容

awk '(NR>=1)&&(NR<=3){print}' test.txt

5 输出第1行,第3行的内容

awk 'NR==1||NR==3{print}' test.txt

6 输出所有奇数行的内容

awk ‘(NR%2)==1{print}’ test.txt

7 输出所有偶数行的内容

awk ‘(NR%2)==0{print}’ test.txt

8 输出以root开头的行

awk -F: '/^root/{print}' /etc/passwd

9 输出以nologin结尾的行

awk '/nologin$/{print}' /etc/passwd

10 统计以/bin/bash结尾的行数,等同于grep –c “/bin/bash$ ” /etc/passwd

awk 'BEGIN {x=0};//bin/bash$/{x++};END {print x}' /etc/passwd

11 统计以空行分隔的文本段落数

awk 'BEGIN {RS=””} ;END{print NR}' test.txt

按字段输出文本

1 输出每行中(以空格或制表符分隔)的第三个字段
awk ‘{print $3}’ test.txt

2 输出每行中第1,3个字段
awk ‘{print $1,$3}’ test.txt

3 输出密码为空的用户的shadow记录
awk -F: ‘$2=="!!"{print}’ /etc/shadow

4 输出密码为空的用户的shadow记录
awk ‘BEGIN {FS=":"} ; $2=="!!"{print}’ /etc /shadow

5 输出以冒号分隔且第7个字段中包含/bash的行的第一个字段
awk -F: ‘$7~"/bash"{print $1}’ /etc/passwd

6 输出包含8个字段且第一个字段中包含nfs的行的第1,2个字段
awk ‘($1~“nfs”)&&(NF==8){print $1,$2}’ /etc/services

7 输出第七个字段既不为/bin/bash也不为/sbin/nologin的所有行
awk -F: ‘($7 != “/bin/bash”)&&($7 != “/sbin/nologin”){print}’ /etc/passwd

通过管道、双引号调用Shell命令

1 调用wc –l命令统计使用bash的用户的个数,等同于grep –c “bash$ ” /etc/passwd
awk -F: ‘/bash $/{print | “wc -l”}’ /etc/passwd

2 调用w命令,并用来统计在线用户数
awk ‘BEGIN {while (“w” | getline) n++ ; {print n-2}}’

3 调用hostname,并输出当前主机名
awk ‘BEGIN {“hostname” | getline ; print $0}’

2.4 awk工作原理

逐行读取文本,默认以空格为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。

三、sort 工具

sort是一种以行为单位对文件内容进行排序的工具,也可以根据不同的数据类型来排序。
字符排序 (默认)
数字排序

3.1 语法格式

sort [选项] 参数

3.2 常用选项

选项作用
-f忽略大小写;
-b忽略每行前面的空格;
-M按照月份进行排序;
-n按照数字进行排序;
-r反向排序;
-u等同于uniq,表示相同的数据仅显示一份;
-t指定分隔符,默认使用[TAB]键分隔;
-o<输出文件>将排序后的结果转存至指定文件;
-k指定排序区域

3.3 用法示例

1 将/etc/passwd 文件中的账号进行排序。
sort /etc/passwd

2 将/etc/passwd 文件中第三列进行反向排序。
sort -t “∶” -k 3 /etc/passwd
这命令读取/etc/passwd 文件的内容,将其每行内容使用∶进行分割,然后按照第三个字段进行排序。

3 按照数值排序
sort -nt “∶” -k 3 /etc/passwd

四、uniq 工具

uniq工具在Linux系统中通常与sort命令结合使用,用于报告或者忽略文件中的重复行

4.1 常用选项

选项作用
-c进行计数;
-d仅显示重复行;
-u仅显示出现一次的行

4.2 用法示例

删除file文件中的重复行。
uniq -cd file

五、tr 工具

tr命令常用来对来自标准输入的字符进行替换、压缩和删除

5.1 语法格式

tr [选项] [参数]

5.2 常用选项

选项作用
-c取代所有不属于第一字符集的字符;
-d删除所有属于第一字符集的字符;
-s把连续重复的字符以单独一个字符表示;
-t先删除第一字符集较第二字符集多出的字符,做替换

5.3 用法示例

1∶ 将输入字符由大写转换为小写。
echo "KGC"│ tr ‘A-Z’ ‘a-z’
kgc

2∶ 压缩输入中重复的字符。
echo “thissss is a text linnnnnnne.” | tr -s ‘sn’
this is a text line.

3∶ 删除字符串中某些字符。
echo ‘hello world’ | tr -d ‘od’
hell wrl

4∶ 取代所有不属于第一字符集的字符
echo abccabacca | tr -c ab 0
ab00aba00a0

5∶先删除第一字符集较第二字符集多出的字符,做替换
echo abcabc123 | tr -t ‘abc’ ‘d’
dbcdbc123

echo abcabc123 | tr -t ‘abc’ ‘ttt’
tttttt123

echo abcabc123 | tr -t ‘ab’ ‘ttt’
ttcttc123

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值