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


推荐阅读
  • 本文档详细介绍了2017年8月31日关于MySQL数据库备份与恢复的教学内容,包括MySQL日志功能、备份策略、备份工具及实战演练。 ... [详细]
  • 全能终端工具推荐:高效、免费、易用
    介绍一款备受好评的全能型终端工具——MobaXterm,它不仅功能强大,而且完全免费,适合各类用户使用。 ... [详细]
  • php写定时器避免内存泄露的方法
    小编给大家分享一下php写定时器避免内存泄露的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大 ... [详细]
  • Shell脚本中的条件判断与实践案例
    本文提供了几个实用的Shell脚本案例,包括监控磁盘空间、检测Web服务状态以及使用Curl进行服务可用性测试。每个案例都详细介绍了脚本的编写方法和运行效果。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 本文介绍了一种监控网络接口速率的Shell脚本,重点分析了其中出现的语法错误,并提供了详细的修正方法。该脚本旨在实时监测网络接口的上传和下载速度。 ... [详细]
  • 本文介绍了如何在Mac操作系统中实现对NTFS文件系统的完整读写功能,包括必要的软件安装步骤和配置方法。 ... [详细]
  • 本文探讨了如何使用ls -lsh命令排除总大小输出,仅显示文件大小的方法,并提供了几种实现这一目标的解决方案。 ... [详细]
  • Zabbix配置磁盘性能监控
    本文介绍了如何通过Zabbix监控系统中的磁盘性能,包括读写操作次数、活跃I/O时间等关键指标的设置与测试。 ... [详细]
  • 开发笔记:Bash:从一个引用字符串块中的每个带引号的字符串中创建一个变量 ... [详细]
  • 本文详细介绍了如何通过RPM包在Linux系统(如CentOS)上安装MySQL 5.6。涵盖了检查现有安装、下载和安装RPM包、配置MySQL以及设置远程访问和开机自启动等步骤。 ... [详细]
  • ElasticSearch 集群监控与优化
    本文详细介绍了如何有效地监控 ElasticSearch 集群,涵盖了关键性能指标、集群健康状况、统计信息以及内存和垃圾回收的监控方法。 ... [详细]
  • 在Kubernetes集群中部署Kuboard
    本文详细介绍了如何在Kubernetes(简称k8s)环境中部署Kuboard,包括必要的命令和步骤,帮助用户顺利完成安装。 ... [详细]
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社区 版权所有