热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Shell扩展正则表达式awk工具详解

扩展正则表达式元字符扩展正则表达式是对基础正则表达式的扩充深化扩展元字符awk工具awk是一个功能强大的编辑工具,逐行读取输入文本,并根据指定的匹配
扩展正则表达式元字符
  • 扩展正则表达式是对基础正则表达式的扩充深化
  • 扩展元字符

在这里插入图片描述

awk工具

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

awk工具介绍


  • 功能强大的编辑工具
  • 无交互的情况下实现复杂的文本操作
  • 命令格式

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

awk工作原理

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

awk内置变量


  1. FS:指定每行文本的字段分隔符,缺省为空格或制表位
  2. NF:当前处理的行的字段个数
  3. NR:当处理的行的行号(序数)
  4. $0:当前处理的行的整行内容
  5. $n:当前处理行的第n个字段(第n列)
  6. pFILENAME:被处理的文件名
  7. RS:数据记录分隔,默认为\n,即每行为一条记录

awk用法示例

按行输出文本

[root@localhost~]# awk -F: '{print $1,$7}' /etc/passwd
没有条件指定,输出第一字段到第七字段,操作文件为 /etc/passwd

[root@localhost~]# awk -F: '/^lisi/{print $1,$7}' /etc/passwd
指定条件为lijin,输出第一字段和第七字段
lisi(第一字段) /bin/bash(第七字段)

[root@localhost~]# awk -F: '/\/sbin\/nologin$/{print $1,$7}' /etc/passwd
输出以'/sbin/nologin'结尾的全部输出,指定条件

[root@localhost~]# awk -F: 'NR==6{print $1,$7}' /etc/passwd
输出第六行的第一字段和第七字段

[root@localhost~]# awk -F: 'NR==6,NR==10{print $1,$7}' /etc/passwd
[root&#64;localhost~]# awk -F: &#39;(NR>&#61;6)&&(NR<&#61;10){print $1,$7}&#39; /etc/passwd
&#xff08;具体范围内&#xff09;输出第六行到第十行的第一字段和第七字段&#xff0c;两种方法结果一样

[root&#64;localhost~]# awk -F: &#39;(NR&#61;&#61;6)||(NR&#61;&#61;10){print $1,$7}&#39; /etc/passwd
||指定输出第六行和第十行的第一字段和第七字段

[root&#64;localhost~]# awk -F: &#39;(NR&#61;&#61;6)||(NR&#61;&#61;10){print}&#39; /etc/passwd
指定输出第六行和第十行

[root&#64;localhost~]# awk -F: &#39;(NR%2)&#61;&#61;1{print}&#39; /etc/passwd
输出所有奇数行

[root&#64;localhost~]# awk -F: &#39;(NR%2)&#61;&#61;0{print}&#39; /etc/passwd
输出所有偶数行

[root&#64;localhost~]# awk -F: &#39;/^root/{print}&#39; /etc/passwd
输出以&#39;root&#39;开头的行

[root&#64;localhost~]# awk &#39;BEGIN {x&#61;0};/\/bin\/bash$/{x&#43;&#43;};END {print x}&#39; /etc/passwd
统计以&#39;/bin/bash&#39;结尾的行数

按字段输出文本

[root&#64;localhost~]# vi test.txt #以这篇文档为例

在这里插入图片描述

[root&#64;localhost~]# awk &#39;{print $3}&#39; test.txt
输出每行中的第三个字段&#xff08;以空格或制表分隔&#xff09;

[root&#64;localhost~]# awk &#39;{print $1,$3}&#39; test.txt
输出每行中第一个字段和第三个字段

[root&#64;localhost~]# awk -F: &#39;$2&#61;&#61;"!!"{print $1}&#39; /etc/shadow
[root&#64;localhost~]# awk &#39;BEGIN {FS&#61;":"};$2"!!"{print}&#39; /etc/shadow
输出密码为空的用户的shadow记录 &#xff08;两种方法&#xff09;

[root&#64;localhost~]# awk -F: &#39;$7~"sh"{print $1}&#39; /etc/passwd
输出第七个字段中包含/bash 的行的第一个字段

[root&#64;localhost~]# awk -F: &#39;($7!&#61;"/bin/bash")&&($7!&#61;"/sbin/nologin")&#39;{print} /etc/passwd
输出第七个字段既不为/bin/bash也不为/sbin/nologin的所有行

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

[root&#64;localhost~]# awk -F: &#39;/bash$/&#39;{print} /etc/passwd | wc -l
[root&#64;localhost~]# grep -c "bash$" /etc/passwd
调用&#39;wc -l&#39;命令统计使用&#39;bash&#39;的用户个数 (两种方法)

[root&#64;localhost~]# awk &#39;BEGIN {while ("w" | getline) n&#43;&#43;; {print n-2}}&#39;
调用w命令,并用来统计在线用户数

[root&#64;localhost~]# awk &#39;BEGIN {"cat /etc/hostname" | getline;print $0}&#39;
调用hostname&#xff0c;输出当前的主机名

sort工具

sort常用选项


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

[root&#64;localhost~]# sort /etc/passwd
按行开头字母a、b、c、d......进行排序&#xff0c;操作文件为/etc/passwd

[root&#64;localhost~]# sort -t ":" -k 3 /etc/passwd
将每行第三个字段排序

[root&#64;localhost~]# sort -n -t ":" -k 3 /etc/passwd
将每行第三个字段按数字排序

[root&#64;localhost~]# sort -n -t ":" -rk 3 /etc/passwd
将每行第三个字段按数字反向排序

[root&#64;localhost~]# sort -n -t ":" -rk 3 /etc/passwd -o a.txt
/etc/passwd内容输出到a.txt

uniq工具

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

  • -c:进行计数
  • -d:仅显示重复行
  • -u:仅显示出现一次的行

[root&#64;localhost~]# vi a
创建文件测试

在这里插入图片描述

[root&#64;localhost~]# uniq a
重复行做合并

[root&#64;lo·calhost~]# uniq -c a
进行计数

[root&#64;localhost~]# uniq -d a
仅显示重复行

[root&#64;localhost~]# uniq -cd a
计数显示重复行

[root&#64;localhost~]# uniq -u a
输出出现一次的行

tr 工具

tr 命令常用来对来自标准输入的字符进行替换、压缩和删除。
tr具体的命令语法格式为:tr [选项] [参数]

其常用选项包括以下内容。
  • -c:取代所有不属于第一字符集的字符
  • -d:删除所有属于第一字符集的字符
  • -s:把连续重复的字符以单独一个字符表示
  • -t:先删除第一字符集较第二字符集多出的字符&#xff0c;做替换

[root&#64;localhost~]# echo "KGC" | tr &#39;A-Z&#39; &#39;a-z&#39;
将大写KGC转换为kgc

[root&#64;localhost~]# echo "abcd efgh" | tr -d &#39;ae&#39;
删除字符中某些字符 a和e被删除

[root&#64;localhost~]# echo "abcccc d e f ghillllllllll" | tr -s &#39;cl&#39;
压缩输入中重复的字符 c和l被压缩成一个

[root&#64;localhost~]# echo abcabc123 | tr -t &#39;abc&#39; &#39;t&#39;
tbctbc123
abcabc中的a对应t&#xff0c;a替换成t
[root&#64;localhost~]# echo abcabc123 | tr -t &#39;abc&#39; &#39;tt&#39;
ttcttc123
abcabc中的ab对应tt&#xff0c;ab替换成tt
[root&#64;localhost~]# echo abcabc123 | tr -t &#39;abc&#39; &#39;ttt&#39;
tttttt123
abcabc中的abc对应ttt&#xff0c;abc替换成ttt
[root&#64;localhost~]# echo abcabc123 | tr -t &#39;ab&#39; &#39;ttt&#39;
ttcttc123
先删除第一字符集较第二字符集多出的字符&#xff0c;做替换


推荐阅读
  • 在Linux环境中,通过编写Shell脚本来实现自定义命令的创建与激活,能够极大地简化服务器上多个子系统的管理操作。例如,通过简单的命令如“tt”,即可快速查看各个应用程序的名称及其运行状态,从而提高系统维护的效率和便捷性。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • zabbix 自定义监控
    配置自定义监控,我们需要配置监控项的key,和监控项返回的value添加自定义监控key的格式,在配置文件中添加UserParameter ... [详细]
  • 10分钟带你搞定 Linux awk命令
    欢迎加入JackTian技术交流群!CSDN海量资源免费下载!简介awk是一个强大的文本分析工具,相对于grep的查找,se ... [详细]
  • CentOS7通过RealVNC实现多人使用服务器桌面
    背景:公司研发团队通过VNC登录到CentOS服务器的桌面实现软件开发工作为防止数据外泄,需要在RealVNC设置禁止传输文件、访问粘贴板等策略过程&# ... [详细]
  • Linux中tput命令怎么用
    这篇文章主要介绍Linux中tput命令怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Linux常用命令tput命令将通过ter ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 本文探讨了将PEBuilder转换为DIBooter.sh的方法,重点介绍了如何将DI工具集成到启动层,实现离线镜像引导安装。通过使用DD命令替代传统的grub-install工具,实现了GRUB的离线安装。此外,还详细解析了bootice工具的工作原理及其在该过程中的应用,确保系统在无网络环境下也能顺利引导和安装。 ... [详细]
  • 在OpenCV 3.1.0中实现SIFT与SURF特征检测
    本文介绍如何在OpenCV 3.1.0版本中通过Python 2.7环境使用SIFT和SURF算法进行图像特征点检测。由于这些高级功能在OpenCV 3.0.0及更高版本中被移至额外的contrib模块,因此需要特别处理才能正常使用。 ... [详细]
  • 本文详细介绍了如何正确设置Shadowsocks公共代理,包括调整超时设置、检查系统限制、防止滥用及遵守DMCA法规等关键步骤。 ... [详细]
  • 实现系统调用
    实现系统调用一、实验环境​本次操作还是基于上次编译Linux0.11内核的实验环境进行操作。环境如下:二、实验目标​通过对上述实验原理的认识,相信 ... [详细]
  • 本文介绍了一个使用mii-tool工具检查网络接口状态的Bash脚本,并将结果记录到日志文件中。 ... [详细]
  • 技术日志:在Ubuntu 20.04上部署与移除MySQL 8的详细步骤
    技术日志:在Ubuntu 20.04上部署与移除MySQL 8的详细步骤 ... [详细]
author-avatar
手机用户2502941531
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有