热门标签 | 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系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 文章目录一、awk简介二、awk的两种形式语法格式1options:2command:三、awk工作原理四、记录与字段相关内部变量:五、格式化输出:printf函数六、awk模式和 ... [详细]
  • Java程序员必会的40个Linux命令!
    你知道的越多,不知道的就越多,业余的像一棵小草!你来,我们一起精进!你不来,我和你的竞争对手一起 ... [详细]
  • 动手写一个OpenVPN的wrapper来优化OpenVPN性能
    动手写一个OpenVPN的wrapper来优化OpenVPN性能 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
  • 三、寻找恶意IP并用iptables禁止掉找出恶意连接你的服务器80端口的IP,直接用iptables来drop掉它;这里建议写脚本来运行, ... [详细]
  • BashShell作为Linux的指定合作伙伴我们已经再熟悉不过了,使用Bash可以快速编写简单的脚本方便我们的日常比如善用vim,awk和sed三剑客,也可以创建十分复杂的逻辑, ... [详细]
  • linux 循环 cpu使用率脚本,Linux Shell脚本监视CPU利用率,达到设置的CPU利用率时发送电子邮件...
    有很多开源监控工具可用于监控Linux系统性能,当系统达到给定的阈值限制时,它将发送电子邮件警报。它监视CPU利用率、内存利用率、交换利用率、磁盘空间利 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 统一知识图谱学习和建议:更好地理解用户偏好
    本文介绍了一种将知识图谱纳入推荐系统的方法,以提高推荐的准确性和可解释性。与现有方法不同的是,本方法考虑了知识图谱的不完整性,并在知识图谱中传输关系信息,以更好地理解用户的偏好。通过大量实验,验证了本方法在推荐任务和知识图谱完成任务上的优势。 ... [详细]
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社区 版权所有