热门标签 | 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;做替换


推荐阅读
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • 在探讨 MySQL 正则表达式 REGEXP 的功能与应用之前,我们先通过一个小实验来对比 REGEXP 和 LIKE 的性能。通过具体的代码示例,我们将评估这两种查询方式的效率,以确定 REGEXP 是否值得深入研究。实验结果将为后续的详细解析提供基础。 ... [详细]
  • 2018年9月21日,Destoon官方发布了安全更新,修复了一个由用户“索马里的海贼”报告的前端GETShell漏洞。该漏洞存在于20180827版本的某CMS中,攻击者可以通过构造特定的HTTP请求,利用该漏洞在服务器上执行任意代码,从而获得对系统的控制权。此次更新建议所有用户尽快升级至最新版本,以确保系统的安全性。 ... [详细]
  • 面向切面编程(AOP)是Spring框架的两大核心概念之一,另一个核心概念是控制反转(IoC)。AOP通过在应用程序中分离横切关注点,如日志记录、事务管理和安全性,从而提高代码的模块化和可维护性。本文将深入探讨AOP的核心概念和术语,帮助读者更好地理解和应用这一重要技术。 ... [详细]
  • 如何利用正则表达式(regexp)实现高效的模式匹配?本文探讨了正则表达式在编程中的应用,并分析了一个示例程序中存在的问题。通过具体的代码示例,指出该程序在定义和使用正则表达式时的不当之处,旨在帮助读者更好地理解和应用正则表达式技术。 ... [详细]
  • 掌握PHP编程必备知识与技巧——全面教程在当今的PHP开发中,了解并运用最新的技术和最佳实践至关重要。本教程将详细介绍PHP编程的核心知识与实用技巧。首先,确保你正在使用PHP 5.3或更高版本,最好是最新版本,以充分利用其性能优化和新特性。此外,我们还将探讨代码结构、安全性和性能优化等方面的内容,帮助你成为一名更高效的PHP开发者。 ... [详细]
  • 本文探讨了将PEBuilder转换为DIBooter.sh的方法,重点介绍了如何将DI工具集成到启动层,实现离线镜像引导安装。通过使用DD命令替代传统的grub-install工具,实现了GRUB的离线安装。此外,还详细解析了bootice工具的工作原理及其在该过程中的应用,确保系统在无网络环境下也能顺利引导和安装。 ... [详细]
  • 技术日志:在Ubuntu 20.04上部署与移除MySQL 8的详细步骤
    技术日志:在Ubuntu 20.04上部署与移除MySQL 8的详细步骤 ... [详细]
  • 在Linux环境中,通过编写Shell脚本来实现自定义命令的创建与激活,能够极大地简化服务器上多个子系统的管理操作。例如,通过简单的命令如“tt”,即可快速查看各个应用程序的名称及其运行状态,从而提高系统维护的效率和便捷性。 ... [详细]
  • Java高并发与多线程(二):线程的实现方式详解
    本文将深入探讨Java中线程的三种主要实现方式,包括继承Thread类、实现Runnable接口和实现Callable接口,并分析它们之间的异同及其应用场景。 ... [详细]
  • 利用树莓派畅享落网电台音乐体验
    最近重新拾起了闲置已久的树莓派,这台小巧的开发板已经沉寂了半年多。上个月闲暇时间较多,我决定将其重新启用。恰逢落网电台进行了改版,回忆起之前在树莓派论坛上看到有人用它来播放豆瓣音乐,便萌生了同样的想法。通过一番调试,终于实现了在树莓派上流畅播放落网电台音乐的功能,带来了全新的音乐享受体验。 ... [详细]
  • Python与R语言在功能和应用场景上各有优势。尽管R语言在统计分析和数据可视化方面具有更强的专业性,但Python作为一种通用编程语言,适用于更广泛的领域,包括Web开发、自动化脚本和机器学习等。对于初学者而言,Python的学习曲线更为平缓,上手更加容易。此外,Python拥有庞大的社区支持和丰富的第三方库,使其在实际应用中更具灵活性和扩展性。 ... [详细]
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社区 版权所有