目录

  • 扩展正则表达式
    • 扩展正则表达式元字符
    • 扩展元字符
  • egrep
    • 示例
      • 匹配o至少出现一次或者以上次数的内容
      • 匹配以be为开头,t为结尾,中间可以是s或者为空的内容
    • 匹配以sh为开头,rt为结尾,中间可以是i或者o的内容
      • 匹配包含oo出现一次,或者一次以上的内容
  • awk工具介绍
    • 格式
    • 解析
    • awk工作原理
    • 内建变量
    • 用法
      • 查找出在/etc/passwd所有文件信息的第1个,第7个字段内容
      • 查找出在/etc/passwd所有文件信息的第1个,第7个字段内容且以zjq为开头的和以/sbin/nologin结尾的内容
    • 内建变量用法示例
      • 输出第3行的第1第7个字段
      • 输出第3行到第6行的第1第7个字段,输出第3行,第6行的第1第7个字段,输出大于等于第3行小于等于第6行的第1第7个字段
      • 输出奇数行,偶数行的行号
      • 统计以/bin/bash为结尾的行数
      • 输出文件中每行中(以空格或制表符分隔)的第三个字段
      • 输出文件中每行中(以空格或制表符分隔)的第一和三个字段
      • 输出没有设置密码的用户
      • 输出第7字段包含/bash,/bin/bash的用户
      • 输出在/etc/services中第一个字段是nfs的且字段数是4个
      • 输出第7字段不是/bin/bash也不是/sbin/nologin的内容
      • 调用wc -l命令并用来统计1以/bash为结尾的行数即用户数
      • 调用w命令统计在线的用户数
      • 调用hostname并输出当前的主机名
      • 输出path变量中的值,第三个字段的值

扩展正则表达式

扩展正则表达式元字符

  • 扩展正则表达式是对基础正则表达式的扩充深化

扩展元字符

  • +:匹配前面子表达式1次以上 例如:go+d,将匹配至少一个o(如god,good,goood…)
  • ?:匹配前面子表达式0次或者1次 例如:go?d,将匹配gd或god
  • ():括号中的字符串作为一个整体 例如:(xyz)+,将匹配xyz整体1次以上,如xyzxyz
  • |:以或的方式匹配字条串 例如1:good|food,将匹配good或者food 例如2:g(oo|la)d,将匹配good或者glad
    (g|f)ood good或者food

egrep

示例

匹配o至少出现一次或者以上次数的内容

[root@server2 ~]# vi test.txt
[root@server2 ~]# grep -n 'oo*' test.txt

[root@server2 ~]# vi test.txt
[root@server2 ~]# egrep -n 'o+' test.txt

匹配以be为开头,t为结尾,中间可以是s或者为空的内容

[root@server2 ~]# egrep -n 'bes?t' test.txt

匹配以sh为开头,rt为结尾,中间可以是i或者o的内容

[root@server2 ~]# grep -n sh[io]rt test.txt
[root@server2 ~]# egrep -n 'sh(i|o)rt' test.txt
[root@server2 ~]# egrep -n sh'(i|o)'rt test.txt

匹配包含oo出现一次,或者一次以上的内容

[root@server2 ~]# egrep -n '(oo)+' test.txt

awk工具介绍

格式

  • awk 选项 ‘模式或条件 {编辑指令}’ 文件1 文件2
  • awk -f 脚本文件 文件1 文件2

解析

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

awk工作原理

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

内建变量

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

用法

查找出在/etc/passwd所有文件信息的第1个,第7个字段内容

[root@server2 ~]# awk -F: '{print $1,$7}' /etc/passwd

查找出在/etc/passwd所有文件信息的第1个,第7个字段内容且以zjq为开头的和以/sbin/nologin结尾的内容

[root@server2 ~]# awk -F: '/^zjq/{print $1,$7}' /etc/passwd
[root@server2 ~]# awk -F: '/\/sbin\/nologin$/{print $1,$7}'

内建变量用法示例

输出第3行的第1第7个字段

[root@server2 ~]# awk -F: 'NR==3{print $1,$7}' /etc/passwd

输出第3行到第6行的第1第7个字段,输出第3行,第6行的第1第7个字段,输出大于等于第3行小于等于第6行的第1第7个字段

[root@server2 ~]# awk -F: 'NR==3,NR==6{print $1,$7}' /etc/passwd
[root@server2 ~]# awk -F: '(NR==3)||(NR==6){print $1,$7}' /etc/passwd
[root@server2 ~]# awk -F: '(NR>=3)&&(NR<=6){print $1,$7}' /etc/passwd

输出奇数行,偶数行的行号

[root@server2 ~]# cat /etc/passwd | wc -l
[root@server2 ~]# awk -F: '(NR%2)==1{print $1,$7}' /etc/passwd | wc -l
[root@server2 ~]# awk -F: '(NR%2)==0{print $1,$7}' /etc/passwd | wc -l

统计以/bin/bash为结尾的行数

[root@server2 ~]# awk  'BEGIN {x=0};/\/bin\/bash$/{x++};END {print x}' /etc/passwd

输出文件中每行中(以空格或制表符分隔)的第三个字段

[root@server2 ~]# awk '{print $3}' test.txt

输出文件中每行中(以空格或制表符分隔)的第一和三个字段

[root@server2 ~]# awk '{print $1,$3}' test.txt

输出没有设置密码的用户

[root@server2 ~]# awk -F: '$2=="!!"{print}' /etc/shadow
[root@server2 ~]# awk  'BEGIN {FS=":"};$2=="!!"{print}' /etc/shadow


输出第7字段包含/bash,/bin/bash的用户

[root@server2 ~]# awk -F: '$7~"/bash"{print $1}' /etc/passwd
[root@server2 ~]# awk -F: '$7~"/bin/bash"{print $1}' /etc/passwd

输出在/etc/services中第一个字段是nfs的且字段数是4个

[root@server2 ~]# grep "nfs" /etc/services
[root@server2 ~]# awk '($1~"nfs")&&(NF==4){print $1}' /etc/services

输出第7字段不是/bin/bash也不是/sbin/nologin的内容

[root@server2 ~]# awk -F: '($7!="/bin/bash")&&($7!="/sbin/nologin"){print}' /etc/passwd

调用wc -l命令并用来统计1以/bash为结尾的行数即用户数

[root@server2 ~]# awk -F: '/bash$/{print}' /etc/passwd | wc -l
[root@server2 ~]# awk -F: '/bash$/{print | "wc -l"}' /etc/passwd
[root@server2 ~]# grep -c "bash$" /etc/passwd

调用w命令统计在线的用户数

[root@server2 ~]# awk 'BEGIN {while ("w" | getline) n++; {print n-2}}'

调用hostname并输出当前的主机名

[root@server2 ~]# awk 'BEGIN {"hostname" | getline;print $0}'

输出path变量中的值,第三个字段的值

[root@server2 ~]# echo $PATH
[root@server2 ~]# echo "$PATH" > a.txt
[root@server2 ~]# cat a.txt
[root@server2 ~]# awk -F: '{print}' a.txt
[root@server2 ~]# awk -F: '{print$3}' a.txt

Shell编程扩展正则表达式(egrep、awk)相关推荐

  1. shell编程之正则表达式与总结(grep,egrep)与文件处理器和总结(sed,awk,sort,uniq)

    文章目录 前言 一:基础正则表达式 1.1:正则表达式的定义 1.2:正则表达式用途 1.3:基础正则表达式 1.4:基础正则表达式:grep命令 1.4.1:查找特定字符 1.4.2:利用中括号&q ...

  2. shell编程之正则表达式与总结(grep,egrep)

    文章目录 前言 一:基础正则表达式 1.1:正则表达式的定义 1.2:正则表达式用途 1.3:基础正则表达式 1.4:grep命令 1.4.1:查找特定字符 1.4.2:利用中括号"[]&q ...

  3. shell编程之正则表达式——理论基础

    目录 前言 一.基础正则表达式 1.1 正则表达式的定义 1.2 正则表达式用途 1.3 基础正则表达式 1.4 基础正则表达式:grep命令 1.4.1 查找特定字符 1.4.2 利用中括号&quo ...

  4. Shell编程之正则表达式(及操作案例)

    Shell 编程之正则表达式 正则表达式 1.正则表达式定义 正则表达式又称正规表达式.常规表达式.在代码中常简写为 regex.regexp 或 RE.正则表达式是使用单个字符串来描述.匹配一系列符 ...

  5. shell编程之正则表达式

    shell编程之正则表达式 文章目录 shell编程之正则表达式 正则表达式 1. 正则表达式是什么? 2. 正则能干什么? 3. 正则当中名词解释 4. 第一类正则表达式 ㈠ 正则中普通常用的元字符 ...

  6. Shell编程四剑客之AWK(基础篇)

    Shell 编程四剑客之 AWK 概述 其语法参数格式为,AWK 常用参数.变量.函数详解如下: (1) AWK 基本语法参数详解: (2) AWK 内置变量详解: (3) AWK 内置函数详解: ( ...

  7. Shell 编程之正则表达式与文本处理器--(grep,egrep 与文本处理器-sed、awk、sort、uniq、tr)

    文章目录 一.正则表达式 1.1 正则表达式概述 1.1.1 正则表达式的定义 1.1.2 正则表达式用途 1.2 基础正则表达式 1.3 基础正则表达式:grep命令 1.3.1 查找特定字符 1. ...

  8. 独一无二 Shell 编程之正则表达式 与文本处理器 详细解释

    技能展示: 基础正则表达式 扩展正则表达式 sed 工具使用方法 awk 工具使用方法 4.1 正则表达式 之前学习了 Shell 脚本的基础用法,已经可以利用条件判断.循环等语句编辑 Shell 脚 ...

  9. 正则表达式 以字符串开头_干货-Shell编程之正则表达式

    正则表达式 一.正则表达式的定义 正则表达式又称正规表达式.常规表达式.在代码中常简写为 regex.regexp 或 RE. 1.正则表达式是使用单个字符串来描述.匹配一系列符合某个句法规则的字符串 ...

最新文章

  1. python root_python在非root权限下的安装方法
  2. 阿里用户体验大师教你如何让产品更加触动人心
  3. 直播 | 清华大学李一鸣:后门攻击简介
  4. 【Hibernate】could not instantiate class.. from tuple] with root cause
  5. 单片机的几种数字滤波算法
  6. 不愧是Alibaba技术官,java数组实现单向链表
  7. TVM:在树莓派上部署预训练的模型
  8. php 替换数字和字母,php preg_替换非字母数字字符并选择连词,然后拆分
  9. AE开发之鹰眼窗口、书签
  10. List转Map-JDK8实现
  11. 如何上传蛋白质组数据
  12. 网站备案需要买服务器吗,域名备案需要购买服务器吗
  13. SRT编码器之Rendezvous模式详解
  14. mac上安装brew(最简易)
  15. 大数据:阿里数据仓库建模及管理体系OneData什么是阿里onedata
  16. 华为手机刷微博体验更好?技术角度的分析和思考
  17. 【电脑维修系列】电脑重启快捷键表 进入PE
  18. 7-2 寻找大富翁 (34 分)
  19. matlab去除摩尔纹,索尼ILCE-7RM2测评——理论画质篇
  20. 网易云音乐(移动端)

热门文章

  1. 指针java_Java中的指针
  2. uefi启动 多硬盘gtp_关于UEFI启动+GPT分区的一些经验
  3. EXCEL打开文件显示“文件已损坏,无法打开。”
  4. 最新游戏陪玩语音聊天系统源码+视频搭建教程
  5. Python实现 鱼群算法库
  6. jq实现多开关效果互不影响
  7. SQL Compare数据库比较工具 完全破解+使用教程
  8. 软件架构设计---架构设计
  9. AForge学习笔记(10):AForge.Imaging.Filters
  10. DBlink 创建 删除 脚本